0

我需要为某个对象创建多个数组,其中我需要的数字取决于一个单独的变量,最好的解释方法是使用 psudo 代码示例:

int num = 4;
for(int i=0;i<num;i++){
   object_type arrayi [dynamic size];
}

所以我需要 4 个数组,每个数组的名称为 array0、array1、array2 和 array3,它们都必须是动态数组。无论如何在 C++ 中可以做到这一点?

4

4 回答 4

5
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));
于 2013-08-07T16:43:32.667 回答
2

是的,std::vector<object_type>改为使用。您可以调整到任意大小。否则对于数组,您可以使用动态分配

ObjectType* myArray = new ObjectType[number];

但建议使用 std::vector 代替。

于 2013-08-07T16:42:50.703 回答
0

再次阅读 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);

有关更多信息,请参阅这篇文章。

于 2013-08-07T16:43:36.247 回答
0

如果有一种方法可以像在 C++ 中那样动态创建变量,我还没有听说过。

如果性能是一个问题,并且您需要构建一堆一维数组(而不是数组数组或数组向量),那么您可以在构建时进行代码生成,以制作任意数量的数组。不过,那不在 C++ 范围内;它是输出 C++ 文本文件的预构建命令。

如果性能不是问题,那么像 Benjamin 所做的那样构建一个数组向量会很有效。

于 2013-08-07T16:45:21.503 回答