如何动态创建一个已知二维的c++数组
How to dynamically create a c++ array with known 2nd dimension?
我有一个函数:
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::vector
和std::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_。我已经写了一个简单的代码来展示它的工作原理,请在这里查看。
相关文章:
- 将值从二维数组输出到文本文件
- 在二维数组中查找最小值和最大值?
- 移动二维数组中的字符
- 如何正确填充在堆上分配的二维数组?
- 传递二维数组时出现问题
- 具有随机数的二维数组不会更改
- 如何在C++中获取二维数组中最少的一列数?
- 如何使用用户输入变量制作二维数组?
- C++ 中动态二维数组的访问冲突
- 遍历二维数组的所有子数组
- 将二维数组的所有元素插入到一维数组中
- 在函数中传递二维数组
- 为什么指针在对二维数组进行排序时无法正常工作?
- 创建 std::string 的二维数组的最佳做法
- 如何将文本文件读取到二维数组中并以 c++ 打印
- 元素在二维数组 c++ 中的出现次数
- 执行 c++ 二维数组
- C++ 中的二维数组初始化为一个值
- 在C++中初始化第一维大小未知的二维数组
- 如何在二维数组中存储值?