我想獲得一個可以通過arr [i] [j]訪問的二維int數組arr
。在C++中聲明可變長度二維數組的正確方法
據我所知我可以聲明int arr[10][15];
得到這樣一個數組。 在我的情況下,大小是可變的,據我所知,如果數組的大小沒有硬編碼,但這種語法不起作用,但我使用的變量如int arr[sizeX][sizeY]
。
什麼是最好的解決方法?
我想獲得一個可以通過arr [i] [j]訪問的二維int數組arr
。在C++中聲明可變長度二維數組的正確方法
據我所知我可以聲明int arr[10][15];
得到這樣一個數組。 在我的情況下,大小是可變的,據我所知,如果數組的大小沒有硬編碼,但這種語法不起作用,但我使用的變量如int arr[sizeX][sizeY]
。
什麼是最好的解決方法?
如果你不希望使用向量的std::vector
(或新的C++ 11 std::array
),那麼你必須手動分配所有子陣列:
int **arr = new int* [sizeX];
for (int i = 0; i < sizeX; i++)
arr[i] = new int[sizeY];
當然也不要完成後忘記delete[]
。
如果您要在C中尋找解決方案,請參閱此堆棧溢出線程: How do I work with dynamic multi-dimensional arrays in C?。
如果C++沒問題,那麼您可以創建一個2D矢量,即矢量矢量。見http://www.cplusplus.com/forum/general/833/。
你不能用數組語法。該語言要求您使用編譯時常量來創建數組。
你可以使用'int **'(或者你想要的任何類型)。一旦你正確'malloc()'編輯它,你可以使用兩個下標運算符來訪問元素。 –
@Chris Parton:這不是數組語法。它使用指針和新的模擬動態大小的數組。 –
我從來沒有說過這是:)我只是指出,他有可能使用與多維數組相同的方式使用指針來訪問元素。爲此,語法是相同的;但我同意使用這樣的指針不是數組語法。 –
C++沒有可變長度數組。你可以考慮使用vector<vector<int> >
。它也可以使用arr[i][j]
訪問。
c/C++不支持多維數組。但它確實支持陣列:
//simulate 2-dimension array with 1-dimension array
{
int x = 20;
int y = 40;
int * ar = new int(x*y);
int idx_x =9;
int idx_y=12;
ar[idx_x + idx_y * x] = 23;
}
//simulate 2-dimension array with array of array
{
int x = 20;
int y = 40;
int**ar = new int*[y];
for(int i = 0; i< y; ++i)
{
ar[i] = new int[x];
}
ar[9][12] = 0;
}
正如fefe所說,你可以使用矢量矢量, G。 :
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector< vector<int> > vec;
vector<int> row1;
row1.push_back(1);
row1.push_back(2);
vector<int> row2;
row2.push_back(3);
row2.push_back(4);
vec.push_back(row1);
vec.push_back(row2);
for(int ix = 0; ix < 2; ++ix)
for(int jx = 0; jx < 2; ++jx)
cout << "[" << ix << ", " << jx << "] = " << vec[ix][jx] << endl;
}
你的問題說C,但你的標籤說C++。你能澄清一下嗎?另外,除非'sizeX'和'sizeY'是'const',否則使用變量來確定數組大小是無效的。但是,gcc(或g ++)支持這個,除非你傳遞'-ansi'或'-pedantic'標誌。我仍然建議不要使用它,因爲它不是標準的C/C++。 –