新的int [] []在C++中是否有效?

cra*_* oz 14 c++ c++11

我遇到了一些代码,它们使用以下方法分配2d数组:

auto a = new int[10][10];
Run Code Online (Sandbox Code Playgroud)

这在C++中是否有效?我搜索了几本C++参考书,但没有人提到这种方法.通常我会手动完成分配,如下所示:

int  **a = new int *[10];
for (int i = 0; i < 10; i++) {
    a[i] = new int[10];
}
Run Code Online (Sandbox Code Playgroud)

如果第一种方法有效,那么首选哪种方法?

Gal*_*lik 19

第一个例子:

auto a = new int[10][10];
Run Code Online (Sandbox Code Playgroud)

这将多维数组或数组数组分配为连续的内存块.

第二个例子:

int** a = new int*[10];
for (int i = 0; i < 10; i++) {
    a[i] = new int[10];
}
Run Code Online (Sandbox Code Playgroud)

这不是一个真正的多维数组.事实上,它是一个指针数组,需要两个间接来访问每个元素.

  • 分配二维数组可确保整个数组位于单个连续的内存块中.另一方面,对于指针数组,每个段可以在存储器中的任何位置,这可能大大增加高速缓存未命中的可能性. (7认同)