// [M][n] 型,直接的方法 TYPE_3 int* a[M]; for (int i = 0; i < M; ++i) a[i] = new int[n]; a[var_m][var_n] = 0; for (int i = M; i > 0;) delete[] a[--i];
事实上,我们可以改进一下,只用一次 new:
// [M][n] 型,改进 TYPE_4 int* a[M]; a[0] = new int[M*n]; for (int i = 1; i < M; ++i) a[i] = a[i-1] + n; a[var_m][var_n]; delete[] a[0];
这样改进的好处是,减少 new 所带来的固有开销;如果失败,无需对前面 已分配的再 delete[]。当然,如果内存比较碎的话,那就没办法了。
三、二维都是动态确定:
二维都是动态确定的话,可以这样:
// [m][n],直接的方法 TYPE_5 int** a; a = new (int*)[m]; for (int i = 0; i < m; ++i) a[i] = new int[n]; a[var_m][var_n] = 0; for (int i = m; i > 0;) delete[] a[--i]; delete[] a;
类似改进 TYPE_3,我们也可以将 TYPE_5 改进:
// [m][n],改进 TYPE_6 int** a; a = new (int*)[m]; a[0] = new int[m*n]; for (int i = 1; i < m; ++i) a[i] = a[i-1] + n; a[var_m][var_n] = 0; delete[] a[0]; delete[] a;