如果我的矢量开头有一些信息,例如:
vector<int> ordered_set;
ordered_set.resize(5);
for (int counter=0; counter<5; counter++){
ordered_set[counter]=counter+1;
}
Run Code Online (Sandbox Code Playgroud)
然后我将其调整为:
ordered_set.resize(10,0);
Run Code Online (Sandbox Code Playgroud)
通过指针算术,仍然可以保证1到5作为前五个元素ordered_set[0,1,2..4]吗?或者,如果没有找到调整大小的连续内存并且需要重新分配,标准是否允许内容置换?换句话说ordered_set[0,1,2..4]可能会遇到0?
A std::vector被定义为元素的连续容器.如果向量的分配器在调整大小时无法提供足够的内存,则向量将不会"破裂".由于抛出异常,它无法保持其不变性,因此操作根本无法完成.
对于指针运算,您可以确保在调整大小后遍历向量将生成您之前放置的相同整数值.但是请确保不要使用在调整大小之前获得的任何指针或迭代器,因为这些指针或迭代器将变得无效.