C++容器的迭代器失效规则是什么?
优选地以摘要列表格式.
(注意:这是Stack Overflow的C++常见问题解答的一个条目.如果你想批评在这种形式下提供常见问题解答的想法,那么发布所有这些的元数据的发布将是这样做的地方.这个问题在C++聊天室中受到监控,其中FAQ的想法一开始就出现了,所以你的答案很可能被那些提出想法的人阅读.)
我有一个线段列表(std::vector<std::pair<int, int> >我想对其进行迭代和细分。该算法将以psuedocode表示:
for segment in vectorOfSegments:
firstPoint = segment.first;
secondPoint = segment.second;
newMidPoint = (firstPoint + secondPoint) / 2.0
vectorOfSegments.remove(segment);
vectorOfSegments.push_back(std::make_pair(firstPoint, newMidPoint));
vectorOfSegments.push_back(std::make_pair(newMidPoint, secondPoint));
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是如何push_back在不永久遍历此列表的情况下如何添加新元素(并删除旧元素)。
似乎最好的方法可能是首先创建此向量的副本,然后将该副本用作参考,clear()原始向量,然后push_back将新元素用作最近清空的向量。
有更好的方法吗?
预期输出是: 1 2 3 4,如果我们取消注释提到的执行推回操作的行并运行代码,预期输出仍然是 1 2 3 4。但是猜猜它完全不同。运行一下你就知道了。为什么会发生这种情况?
#include <iostream>
#include<vector>
using namespace std;
int main()
{
int k=2;
vector<int> v;
vector<int> :: iterator itr;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);
v.push_back(6);
v.push_back(7);
auto a=v.begin();
for(int i=0;i<4;i++){
cout<<*a<<" ";
//v.push_back(anynumber); ----------------------------------->This line
a++;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)