2011-11-28 75 views
4

我想獲得一個可以通過arr [i] [j]訪問的二維int數組arr在C++中聲明可變長度二維數組的正確方法

據我所知我可以聲明int arr[10][15];得到這樣一個數組。 在我的情況下,大小是可變的,據我所知,如果數組的大小沒有硬編碼,但這種語法不起作用,但我使用的變量如int arr[sizeX][sizeY]

什麼是最好的解決方法?

+2

你的問題說C,但你的標籤說C++。你能澄清一下嗎?另外,除非'sizeX'和'sizeY'是'const',否則使用變量來確定數組大小是無效的。但是,gcc(或g ++)支持這個,除非你傳遞'-ansi'或'-pedantic'標誌。我仍然建議不要使用它,因爲它不是標準的C/C++。 –

回答

11

如果你不希望使用向量的std::vector(或新的C++ 11 std::array),那麼你必須手動分配所有子陣列:

int **arr = new int* [sizeX]; 
for (int i = 0; i < sizeX; i++) 
    arr[i] = new int[sizeY]; 

當然也不要完成後忘記delete[]

+0

不應該是'delete []'? – Vladimir

+0

@Vladimir當然可以。 –

+0

@Some程序員哥們如何刪除?這是真的嗎?刪除[] arr []? –

0

你不能用數組語法。該語言要求您使用編譯時常量來創建數組。

+0

你可以使用'int **'(或者你想要的任何類型)。一旦你正確'malloc()'編輯它,你可以使用兩個下標運算符來訪問元素。 –

+0

@Chris Parton:這不是數組語法。它使用指針和新的模擬動態大小的數組。 –

+1

我從來沒有說過這是:)我只是指出,他有可能使用與多維數組相同的方式使用指針來訪問元素。爲此,語法是相同的;但我同意使用這樣的指針不是數組語法。 –

0

C++沒有可變長度數組。你可以考慮使用vector<vector<int> >。它也可以使用arr[i][j]訪問。

1

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;  
    } 
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; 

}