vector容器使用erase删除操作不仅会使指向的被删元素的迭代器失效,而且删除后里面的迭代器也会失效,所以不能使用erase(it++)的方法,
但是STL这么成熟的技术,总得有办法使用迭代器向下遍历,如此就的找方法,erase的返回值为下一个有效的迭代器,
vector<int> vecData;
<span style="white-space:pre"> </span>for (int i = 0; i < 5; ++i)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>vecData.push_back(i);
<span style="white-space:pre"> </span>}
vector<int>::iterator it = vecData.begin();
for (; it != vecData.end(); ++it)
{
if (*it == 3)
{
it = vecData.erase(it);
}
}
for (int i = 0; i <vecData.size(); ++i)
{
cout << vecData[i] << endl;
}
map容器的操作就正好和vector容器相反,调用erase后返回的是void,
map<int, int> mapData;
for (int i = 0; i < 5; ++i )
{
mapData.insert(make_pair(i, i));
}
map<int, int>::iterator it = mapData.begin();
while(it != mapData.end())
{
if (*it == 3)
{
mapData.erase(it++);
break;
}
++it;
}