对于顺序容器,其具有insert操作,在进行insert操作时会使容器原有元素的迭代器失效,这时若仍使用原有的迭代器iterator,可能会产生很神奇的错误。下面附上自己在学习C++时遇到的错误。C++小白一枚,如有错误描述,欢迎大神指正。
代码如下:
#include <iostream>
#include <vector>
void double_and_insert(std::vector<int>& v, int some_val) //插入函数
{
auto mid = v.begin() + v.size() / 2; //找到容器现有元素的中间位置
for (auto curr = v.begin(); curr != mid; ++curr) //在中间位置前
{
if (*curr == some_val) //容器内元素与some_val比较
{
++(curr = v.insert(curr, 2 * some_val));
//insert可以在curr所指元素前插入元素并将新元素的位置传递出来赋给curr
//再执行++操作,使curr指向原元素的位置,以免重复判断和死循环的产生
}
}
}
int main()
{
std::vector<int> v{ 1, 9, 1, 9, 9, 9, 1, 1 };
double_and_insert(v, 1);
for (auto i : v)
std::cout << i << std::endl;
}
这时编译可以通过,但运行会出现vector