vector<int> v = { 1,2,3,4,5 };
for (auto beg = v.begin(); beg != v.end();++beg)
{
if (beg == v.begin())
v.push_back(50);
}
在运行期间,它说:“矢量迭代器不可递增”。
答案 0 :(得分:9)
如果new size()大于capacity(),那么所有迭代器和引用(包括过去的迭代器)都将失效。否则只有过去的迭代器无效。
在您的示例中,beg
是一个迭代器。它被push_back无效,你不能再使用了它。
答案 1 :(得分:1)
如上所述,std::vector::push_back()
可能会使您的迭代器失效。可能但非常丑陋的解决方案可能是:
for (auto beg = v.begin(); beg != v.end();++beg)
{
if (beg == v.begin()) {
v.push_back(50);
beg = v.begin();
}
}
但是你的逻辑似乎很复杂,为什么不在循环之前回来?