對於常規的方法:t [n][n]的方法我就不說了。首先介紹兩個動態的建立方法,然後介紹一下c++標準的中使用stl的容器vector建立二維陣列的方法。
1.
定義:
const int row = 3;
int size = 5;
int (*pi)[row] = new int[size][row];
操作方法:
int k = 0;
cout <
記憶體釋放:
delete pi;
缺點:low必須是已知。
優點:呼叫直觀,連續儲存,程式簡潔(經過測試,析構函式能正確呼叫)。
2.
定義:
int** ppi = new int*[size];
for ( i=0; i
操作方法:
cout <
記憶體釋放:
for ( i=0; i
缺點:非連續儲存,記憶體釋放煩瑣,雙重指標。
優點:呼叫直觀,size可以不是已知
由於stl的容器都支援動態增長,可以隨時使用vector.resize()來改變容器的容量,所以使用vector建立的陣列就具有動態建立的特性。
3.
定義:
vector< vector> ivec( 10 );//指定行的數量
操作方法:
//初始化
vector< vector>::iterator iiter = ivec.begin();
vector< int >::iterator iter;
for ( int i=0; iiter!=ivec.end(); ++iiter )
}//輸出
cout <<"ivec : " end(); ++iter )
{cout <
缺點:非連續儲存,除錯不夠方便,編譯速度下降,程式膨脹(實際速度差別不大)。
優點:呼叫直觀,自動析構與釋放記憶體,可以呼叫stl相關函式,動態增長。
還可以使用以下的定義指定二維陣列的行數和列數:
vector< vector> ivec2( 10, vector(10) );
除此以外,我還在網上看到過以下這樣的二級陣列的定義,但對於我個人來說,這些所謂的二維陣列只是一些所謂的一維陣列(我這裡強調「所謂」,是想說明,無論是多少維的陣列,記憶體的儲存結構都是一維的線性儲存,只是以我們人的邏輯,拿[ ]和[ ][ ]加以區分而已),所以只提供了解!
t* ga = new t[m*n];
...
delete ga;
vectorga;
ga.resize(m*n);
建立二維陣列的方法(隨時更新
對於常規的方法 t n n 的方法我就不說了。首先介紹兩個動態的建立方法,然後介紹一下c 標準的中使用stl的容器vector建立二維陣列的方法。1.定義 const int row 3 int size 5 int pi row new int size row 操作方法 int k 0 cout...
建立二維陣列的方法選擇
參考資料 今天搜尋看見milo yip的知乎回答,講解c語言幾種二維陣列的建立方法及優劣。這裡總結分享一下。如果二維陣列長度一定,最簡單的方法也最有效 const size t m 10,n 20 size t 一般為 unsigned long long const 宣告常量避免 magic nu...
new動態建立二維陣列的方法
1.a ga n new a m n delete ga 缺點 n 必須是已知 優點 呼叫直觀,連續儲存,程式簡潔 經過測試,析構函式能正確呼叫 2.a ga new a m for int i 0 i m i ga i new a n for int i 0 i m i delete ga i d...