天天看點

C++ 二維數組

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); //

...

缺點:非連續儲存,調試不夠友善,編譯速度下降,程式膨脹(實際速度差别不大)

優點:調用直覺,自動析構與釋放記憶體,可以調用stl相關函數,動态增長

5. vector ga;

ga.resize(m*n);

方法3,4的結合

6. 2的改進版

A** ga = new A*[m];

ga[0] = new A[m*n];

for(int i = 1; i < m; i++)

ga[i] = ga[i-1]+n;

優點:連續存儲,n可以不是已知,析構友善,猜想隻需delete [] ga;