比如当我们要删除容器中所有值为3的元素的时候,如果不注意,就会造成非法访问,程序崩掉
void printVector(vector<int>& v)
{
for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
void test4()
{
vector<int>v;
v.push_back(5);
v.push_back(4);
v.push_back(3);
v.push_back(3);
v.push_back(2);
v.push_back(1);
//注意erase()函数的返回值为当前删除的元素下一个迭代器
for(auto itr = v.begin();itr != v.end();)
{
if (*itr == 3)
{
//注意erase()函数的返回值为当前删除的元素下一个迭代器,避开了非法访问
itr = v.erase(itr);
}
else
{
itr++;
}
}
printVector(v);
}
int main()
{
test4();
system("pause");
return EXIT_SUCCESS;
}