基本上我想創建一個使用傳遞給我的類的大小變量的多維數組,但我不知道該怎麼做。使用指針創建一個數組
我試着做
//Class header
Tile * gameTile;
//Class cpp
gameTile = new Tile[size][size];
它不介意new Tile[size]
但不[size][size]
。爲什麼是這樣?
基本上我想創建一個使用傳遞給我的類的大小變量的多維數組,但我不知道該怎麼做。使用指針創建一個數組
我試着做
//Class header
Tile * gameTile;
//Class cpp
gameTile = new Tile[size][size];
它不介意new Tile[size]
但不[size][size]
。爲什麼是這樣?
像弗拉德的鏈接中提到,您可以使用載體,或一些更快速,你可以使用下面的代碼初始化bidimentional陣列:
int i;
int ** intTile;
intTile = new int*[5];
for (i = 0; i < 5; i++) {
intTile[i] = new int[5];
}
編寫代碼的速度並不比矢量矢量更快,而且比專門的矩陣類運行速度更快。儘管如此,它在內存管理方面的失敗遠遠超過了兩者。 – chris
失敗,因爲只有一個第一維分配的數組可能具有動態大小。爲了克服這個限制,你可以使用一個2維向量:
std::vector<std::vector<Tile> > gameTile(size, std::vector<Tile>(size));
我該如何在類頭中聲明?如何根據傳遞給init函數的參數來改變它的大小? – Split
@Split好矢量具有['調整大小()'](http://en.cppreference.com/w/cpp/container/vector/resize)成員函數,所以可以使用它。 – 0x499602D2
至於類頭 - 你打算使用這個?主要內部,一個班級? – 0x499602D2
雖然要使用二維數組,我只是想指出的完整性,您也可以使用一個維數組,你的目的。如果尺寸按尺寸分類,您有:
gameTile = new Tile[size*size];
//now gameTile[y][x] becomes:
Tile t = gameTile[x + y*size];
//if array is not square
gameTile = new Tile[width*height];
//now gameTile[y][x] becomes:
Tile t = gameTile[x + y*width];
什麼是錯誤? – Djon
表達式必須有一個常數值。香港專業教育學院改變了原型,並且爲const,但沒有:/ – Split
一個維度必須是恆定的,讀這http://stackoverflow.com/questions/936687/how-do-i-declare-a-2d-array-in -c-using-new – Djon