如何动态创建一个已知二维的c++数组

How to dynamically create a c++ array with known 2nd dimension?

本文关键字:二维 数组 c++ 何动态 动态 创建 一个      更新时间:2023-10-16

我有一个函数:

void foo(double[][4]);

其采用第二维度等于4的2d阵列。如何分配一个2d数组,以便将其传递给函数?如果我这样做:

double * arr[4];
arr = new double[n][4];

其中n对于编译器来说是未知的。我无法编译它。如果我使用一个通用的2d动态数组,函数foo不会接受它。

根据要求,最好使用typedef

 typedef double four[4];
 four *arr;     // equivalently double (*arr)[4];
 arr = new four[n];

如果没有typedef,你将成为更神秘的

double (*arr)[4];
arr = new double [n][4];

您确实应该考虑使用标准容器(std::vector等(或容器的容器。

 typedef double v4[4];
 v4* arr = new v4[n];

不过,请考虑切换到数组和向量。

我知道这可能不是OP想要做的,但它可能会帮助其他需要类似答案的人。

您正在尝试创建一个静态成功数组的动态数组。STL得到了您的解决方案:std::vectorstd::array

有了这些容器,事情就更容易了:

std::vector<std::array<int, 4>> foo;
// Allocate memory
foo.reserve(8);
// Or instead of 8, you can use some runtime value
foo.reserve(someSize);
// Or did not allocated 8 + someSize, but ensured
// that vector has allocated at least someSize
// Add entries
foo.push_back({1, 2, 3, 4});
// Looping
for (auto&& arr : foo) {
    arr[3] = 3;
}
// Access elements
foo[5][2] = 2;

除了创建一个新类型并占用一个符号之外,您还可以创建一个指向指针的指针,并这样做:

double **arr = new double*[j];
for (int i = 0; i < j; ++i)
{
    arr[i] = new double[4];
}

而CCD_ 6是保持动态值的CCD_。我已经写了一个简单的代码来展示它的工作原理,请在这里查看。