使用std :: vector作为可更改的,完全填充的数组?

时间:2011-12-22 16:30:25

标签: c++ stl

我正在使用矢量。为了我的目的,我通常需要它有(n)元素,只有访问和&使用index []运算符修改。

在某个时刻,我的算法将决定它需要更多的空间,我需要放大这个矢量来说...它的大小是它的2倍。

有没有办法可以将尺寸加倍并使矢量默认值中的所有新空间都用矢量元素类型初始化?

基本上,我不希望手动插入元素以在其加倍后填充容量,我希望它的整个容量可以完全填充并在增加后默认初始化。据我所知,保留只是保留空间(并没有初始化其中的元素,所以虽然我可以使用它和循环插入,但我希望有一个......更有趣?方式)。

所以,我希望使用这个构造函数创建一个新的向量具有类似的效果:

std::vector<MyType> vec(2*oldvec.size(), MyType());

除了我想在它的大小加倍之前保持已经在向量中的元素。

4 个答案:

答案 0 :(得分:8)

你想要std::vector::resize()

答案 1 :(得分:4)

您只需使用resizehttp://www.cplusplus.com/reference/stl/vector/resize/

调整矢量大小

答案 2 :(得分:2)

尝试vec.resize(newsize, MyType())

答案 3 :(得分:0)

正如其他答案所述,resize向量方法会将当前向量的大小设置为请求的值。假设指定的大小较大,它将使用提供的默认值的副本填充新的向量条目。

假设有足够的连续空间可用于向量的扩展,这可能比创建一个新的更大的向量并复制原始内容更有效。

是否需要将新元素初始化为默认值?如果没有,您可以省去麻烦,如果对象不是本机类型,则重复构建默认值的成本,只需将其保留为未初始化直到需要向量位置。在这种情况下,只需使用reserve方法向向量添加更多(未初始化的)存储空间,并根据需要使用推送/弹出例程向向量添加新值。