如何在数组C ++中存储未知数量的元素

时间:2011-04-14 18:40:49

标签: c++ arrays dynamic store

很抱歉,如果标题不清楚,我现在解释一下我的问题。我是C ++的新手。

我用C ++创建了一个类。该类的实例是程序的输入,它们必须存储在数组中以执行计算。问题是,必须由用户定义的该类的实例数量对于单次运行是固定的,但可能因运行而异。这是一个例子:

#include <<blablah>blahblah>

int main()
{
int number_of_instances = 3;

MyClass first_instance(one_parameter_1, another_parameter_1);
MyClass second_instance(one_parameter_2, another_parameter_2);
MyClass third_instance(one_parameter_3, another_parameter_3);

///////////////////

现在我必须在阵列中存储所有这三个

MyClass array[number_of_instances] = {first_instance, second_instance, third_instance};

问题是我之前不知道手中有多少是用户正在输入

///////////////////

performCalculations(array);
return 0;
}

提前多多感谢。

6 个答案:

答案 0 :(得分:6)

典型的C ++解决方案是使用vector

vector<MyClass> v;
v.push_back(first_instance);  //add an already instantiated object to the end of the vector
v.push_back(second_instance);
v.push_back(third_instance);

你不必担心内存管理,你可以像普通数组一样访问矢量:

v[0].classMember

如果需要,您还可以循环向向量添加项目,如下所示:

for(int i = 0; i < 5; i++){
    v.push_back( MyClass(i, param2) );
}

如果你将对象直接存储在向量中,当向量超出范围时,所有对象都将被破坏。

将对象直接存储在向量中的缺点之一是将向量作为参数传递给函数。这将是一个缓慢的操作,因为必须复制向量(及它所拥有的所有对象)。

答案 1 :(得分:2)

如果您在读取它们之前知道实例数,则可以使用new[]在堆上分配一个数组。 (完成后不要忘记delete[]。)请注意,这要求对象具有默认构造函数。

答案 2 :(得分:1)

在这种情况下你应该使用std :: vector而不是内置数组。

#include <vector>
...
std::vector<MyClass> v = {first_instance, second_instance, third_instance};
...
v.push_back(fourth_instance);

答案 3 :(得分:0)

如果您不知道数组将包含多少元素,我将使用std::vector而不是普通数组,因为向量将增长以容纳其他元素。

答案 4 :(得分:0)

你想要的是标准模板库中的Vector类,它的行为就像一个数组,但如果你填充它的内部分配,它会重新调整大小。如果您不需要随机访问它(即使用[]操作符),您可能希望使用List类。如果您使用List,则需要创建一个枚举器来逐步执行它。

答案 5 :(得分:0)

使用std::vector<MyClass>vector模板可以在<vector>标题中找到。在编码使用任何在线可用的c ++常见问题解答

之前,你必须学习一点编码