我有一個C 類,它的一個成員應該是一個二維陣列。我想在類的頭檔案中把我的陣列宣告為一個成員。然后在我的類的建構式中,我想用一個大小(給建構式)來初始化我的陣列,并用零來填充它。
我有一個在java中的作業例子:
我想要的東西。
class Obj {
int[][] array;
public Obj(int sizex, int sizey) /span>{
array = new int[sizex][sizey]。
}
}
public class Main
{
public static void main(String[] args){
Obj o = new Obj(12, 20)。)
}
我不想用指標或 alloc() 和 free() 來搗亂。因為我的類基本上應該是這個陣列的一個封裝器,我想保持它的簡單。
我曾想過使用 std::vector,但是由于陣列在初始化后從未被調整過大小,我覺得vector有點過于強大了...... 是否有比這更好的方法。?
#include<vector>
class Obj {
std::vector<std::vector<int>> array;
public:
Obj(int xsize, int ysize) {
std::vector<std::vector<int>> newArray(xsize, std: :vector<int>(ysize, 0))。)
array = newArray;
}
};
int main()
{
Obj o(12,20)。
uj5u.com熱心網友回復:
std::vector是這里的最佳匹配。(正如你所說,在大多數情況下可以避免使用原始陣列和指標。也請看如何在C 11中有效地選擇一個標準庫容器?)
而且你可以在成員初始化串列中直接初始化array,而不是在默認初始化后在建構式體中進行賦值,例如:
Obj(int xsize, int ysize) : array(xsize, std::vector<int> (ysize, 0) {
}
uj5u.com熱心網友回復:
除了使用std::vector之外,你可以直接從堆中分配所需大小的記憶體。
class Obj {
int** arr;
int x, y;
public:
Obj(int sizex, int sizey) : x(sizex), y(sizey) {
arr = new int*[sizex];
for (unsigned i = 0; i < sizex; i ) {
arr[i] = new int[sizey]。
}
}
//重要的是要洗掉,否則你會得到一個記憶體泄漏。
~Obj() {
for (unsigned i = 0; i < x; i ) {
delete[] arr[i];
}
delete[] arr;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/306921.html
標籤:
上一篇:過濾物件內的陣列值
