C ++向量大小调整元素重新排序了吗?

时间:2018-07-08 07:34:19

标签: c++ vector

如果我的向量开始时​​带有一些信息,例如:

vector<int> ordered_set;
ordered_set.resize(5);
for (int counter=0; counter<5; counter++){
ordered_set[counter]=counter+1;
}

然后我将其大小调整为:

ordered_set.resize(10,0);

通过指针算术ordered_set[0,1,2..4]仍将保证1到5作为前五个元素吗?还是如果找不到用于调整大小的连续内存并需要重新分配,该标准是否允许内容排列?换句话说,ordered_set[0,1,2..4]可能会遇到0?

2 个答案:

答案 0 :(得分:7)

std::vector被定义为元素的连续容器。如果向量的分配器在调整大小时无法提供足够的内存,则向量将不会“断裂”。由于抛出异常,它无法保持其不变性,因此操作将无法完成。

对于指针算术,您可以确定在调整大小之后遍历向量将产生与先前放置在该向量上相同的整数值。但是请确保不要使用在调整大小之前获得的任何指针或迭代器,因为它们将变得无效。

答案 1 :(得分:0)

请参见vector::resize的说明,网址为 https://en.cppreference.com/w/cpp/container/vector/resize

它指出:“附加...元素已附加”。 据我对动词“添加”的理解,这意味着不允许对现有元素进行置换或位置移动。