我需要为某个对象创建多个数组,其中我需要的数字取决于一个单独的变量,最好的解释方法是使用 psudo 代码示例:
int num = 4;
for(int i=0;i<num;i++){
object_type arrayi [dynamic size];
}
所以我需要 4 个数组,每个数组的名称为 array0、array1、array2 和 array3,它们都必须是动态数组。无论如何在 C++ 中可以做到这一点?
我需要为某个对象创建多个数组,其中我需要的数字取决于一个单独的变量,最好的解释方法是使用 psudo 代码示例:
int num = 4;
for(int i=0;i<num;i++){
object_type arrayi [dynamic size];
}
所以我需要 4 个数组,每个数组的名称为 array0、array1、array2 和 array3,它们都必须是动态数组。无论如何在 C++ 中可以做到这一点?
std::array<std::vector<object_type>, 4> array;
for (auto & v : array)
v.resize(dynamic_size);
名字是array[0]
, array[1]
, etc... 而不是array1
, array2
, etc... 但是谁在乎呢?如果您绝对必须拥有这些名字,那么 Cassio 的答案是您最好的选择。
前 C++11 替代方案:
std::vector<object_type> array[4];
for (size_t i=0; i<4; ++i)
array[i].resize(dynamic_size);
如果你想要一个可变数量的数组,那么你可以使用一个向量向量,实际上,它的初始化更加容易。它不需要循环,您可以在构造函数中进行。
std::vector<std::vector<object_type>> array(num, std::vector<object_type>(dynamic_size));
是的,std::vector<object_type>
改为使用。您可以调整到任意大小。否则对于数组,您可以使用动态分配
ObjectType* myArray = new ObjectType[number];
但建议使用 std::vector 代替。
再次阅读 OP,在我看来,数组的数量在编译时是未知的。在这种情况下,您可以使用std::vector<std::vector<object_type>>
:
#include <vector>
// ...
// int num = ???, dynamic_size = ???;
std::vector<std::vector<object_type>> vs(num);
for (auto& v: vs)
v.resize(dynamic_size);
然后您可以使用vs[i][j]
来获取对第 i 个数组(向量)的第 j 个元素的引用。
一条建议:不要将这个 ( std::vector<std::vector<double>>
) 用于线性代数矩阵。
奖励:在 C++14 中(实际上这是 C99 的一个特性,一些编译器允许在 C++ 中作为扩展)你可以这样做:
#include <vector>
// ...
// int num = ???, dynamic_size = ???;
std::vector<object_type> vs[num];
for (auto& v: vs)
v.resize(dynamic_size);
有关更多信息,请参阅这篇文章。
如果有一种方法可以像在 C++ 中那样动态创建变量,我还没有听说过。
如果性能是一个问题,并且您需要构建一堆一维数组(而不是数组数组或数组向量),那么您可以在构建时进行代码生成,以制作任意数量的数组。不过,那不在 C++ 范围内;它是输出 C++ 文本文件的预构建命令。
如果性能不是问题,那么像 Benjamin 所做的那样构建一个数组向量会很有效。