如何在堆上声明一个多维数组,在运行时不改变大小?(最好使用C++11,如果有一些只有在C++14中可用的功能(而不是C++17),我也很乐意听到,但可能对我没有用)。
我已经查看了数十个关于这个主题的问题和答案,但没有一个真正回答它/有些答案与其他答案冲突。
我找到的以下解决方案及其似乎具有的问题使它们不可行(其中大部分来自SO答案及其评论,以下示例都假定3D数组为目标):
普通[] [] []数组声明为new /声明指针数组 问题:内存不连续,每个单独的数组在内存中具有独立位置
多个嵌套在一起的std :: arrays / boost :: arrays 问题:内存不连续,每个单独的数组在内存中具有独立位置
矩阵 问题:仅为std :: array的容器,基本上适用于相同的问题
多个嵌套在一起的std :: vectors 问题:动态,几乎所有先前提到的问题
将其声明为指向普通[]数组的单个块,然后通过运行时计算索引的函数(如GetIndex(array,x,y,z))浏览索引 问题:这似乎适用于所有要点,但是当您需要经常访问/更改元素时,此解决方案似乎不理想,因为它引入了显着的CPU开销
与此有一点无关,如果它们在类中,并且我必须使用.运算符从外部访问它们的值,则我也遇到了一些问题,因此如果有人能告诉正确的解决方案,并提供正确声明和正确访问堆分配的多维数组作为类成员的示例,我将非常感激。
我已经查看了数十个关于这个主题的问题和答案,但没有一个真正回答它/有些答案与其他答案冲突。
我找到的以下解决方案及其似乎具有的问题使它们不可行(其中大部分来自SO答案及其评论,以下示例都假定3D数组为目标):
普通[] [] []数组声明为new /声明指针数组 问题:内存不连续,每个单独的数组在内存中具有独立位置
多个嵌套在一起的std :: arrays / boost :: arrays 问题:内存不连续,每个单独的数组在内存中具有独立位置
矩阵 问题:仅为std :: array的容器,基本上适用于相同的问题
多个嵌套在一起的std :: vectors 问题:动态,几乎所有先前提到的问题
将其声明为指向普通[]数组的单个块,然后通过运行时计算索引的函数(如GetIndex(array,x,y,z))浏览索引 问题:这似乎适用于所有要点,但是当您需要经常访问/更改元素时,此解决方案似乎不理想,因为它引入了显着的CPU开销
与此有一点无关,如果它们在类中,并且我必须使用.运算符从外部访问它们的值,则我也遇到了一些问题,因此如果有人能告诉正确的解决方案,并提供正确声明和正确访问堆分配的多维数组作为类成员的示例,我将非常感激。
int (*arr)[10] = new int [5][10];
这提供了直接的二维数组寻址方式,例如在连续块中使用arr[i][j]
。 - David C. Rankin