轉至水木清華
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];
delete ga;
缺點:非連續儲存,程式煩瑣,ga為a**型別
優點:呼叫直觀,n可以不是已知
3. a* ga = new a[m*n];
...delete ga;
缺點:呼叫不夠直觀
優點:連續儲存,n可以不是已知
4. vector> ga;
ga.resize(m); //這三行可用可不用
for(int i = 1; i < n; i++) //
ga[i].resize(n); //
...缺點:非連續儲存,除錯不夠方便,編譯速度下降,程式膨脹(實際速度差別不大)
5. vect***a;
ga.resize(m*n);
方法3,4的結合
6. 2的改進版(penrose提供,在此感謝)
a** ga = new a*[m];
ga[0] = new a[m*n];
for(int i = 1; i < m; i++)
ga[i] = ga[i-1]+n;
...delete ga[0];
delete ga;
缺點:程式煩瑣,ga為a**型別
優點:連續儲存,呼叫直觀,n可以不是已知
附:1,2,3,6還有對應的malloc-free版本
個人推薦1和4,2可以用4來代替,3,5呼叫太煩瑣,畢竟源程式是拿來看的
不是拿來執行的
下面是一些錯誤和沒成功的版本
1. a* ga = new a[m][n];
必然錯誤
2. vect***a;
ga.resize(m);
gcc 3.2下編譯失敗,不知道其它編譯器效果如何
也不知道標準是否允許
二維陣列new小結
a ga n new a m n delete ga 缺點 n必須是已知 優點 呼叫直觀,連續儲存,程式簡潔 經過測試,析構函式能正確呼叫 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 delete...
C 中二維陣列new小結
二維陣列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...
C 二維陣列new小結 zz
c 二維陣列new小結 zz 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...