如何在数组C++中存储未知数量的元素
How to store an unknown number of elements in an array C++
如果标题不清楚,很抱歉,但我现在将解释我的问题。我是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;
}
提前非常感谢。
典型的C++解决方案是使用向量。
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) );
}
如果将对象直接存储在向量中,那么当向量超出范围时,所有对象都将被销毁。
将对象直接存储在向量中的缺点之一是将向量作为参数传递给函数。这将是一个缓慢的操作,因为矢量(以及它所包含的所有对象(将不得不被复制。
如果在读取所有实例之前就知道实例的数量,那么就可以使用new[]
在堆上分配一个数组。(完成后不要忘记delete[]
。(请注意,这需要对象具有默认构造函数。
在这种情况下,应该使用std::vector,而不是内置数组。
#include <vector>
...
std::vector<MyClass> v = {first_instance, second_instance, third_instance};
...
v.push_back(fourth_instance);
如果您不知道数组将包含多少元素,我会使用std::vector
而不是普通数组,因为向量将增长以容纳额外的元素。
您想要的是标准模板库中的Vector类,它的行为就像一个数组,但如果您填充它的内部分配,它会重新调整大小。如果不需要对其进行随机访问(即使用[]运算符(,则可能需要使用List类。如果你使用List,你需要创建一个枚举器来遍历它。
使用std::vector<MyClass>
,vector
模板可以在<vector>
头中找到。在使用任何在线可用的c++常见问题
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用strcpy将char数组的元素复制到另一个数组
- 使用不带参数的函数访问结构元素
- 给定n个元素的m个集合.在C++中找到出现在最大集合数中的元素
- C++如何通过用户输入删除列表元素
- lower_bound()返回最后一个元素
- 基于多个条件处理地图中的所有元素
- 调整大小后指向元素值的指针unordered_map有效?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 使用函数"remove"删除重复元素
- 具有最大子序列大小的序列,每个元素都相同
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何将元素添加到数组的线程安全函数?
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- 我想访问std::unique_ptr中的一个特定元素
- 如何通过 getter 函数删除矢量的元素?
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- 从控制台中删除最后打印的元素
- 擦除while循环中迭代的元素