1.連續內存序列容器(vector,string,deque)
序列容器的erase方法返回值是指向緊接在被刪除元素之后的元素的有效迭代器,可以根據這個返回值來安全刪除元素。
vector<int> c;
for(vector<int>::iterator it = c.begin(); it != c.end();)
{
if(need_delete())
it = c.erase(it);
else
++it;
}
2.關聯容器(set,multiset,map,multimap)
關聯容器的erase方法沒有返回值,被刪除的迭代器失效,所以刪除前必須確保能得到下一個迭代器,可以用“后置遞增迭代器”技術。
map<int,int> m;
for(map<int,int>::iterator it = m.begin(); it != m.end();)
{
if(need_delete())
m.erase(it++);
else
++it;
}
m.erase得到it的一個副本,在erase真正開始之前it已經遞增了。
所以erase得到了當前的迭代器,在erase內部工作開始之前it已經++了,正好滿足我們的需要。
3.非連續內存序列容器(list)
只所以單獨列出來是因為以上兩種方法對list都適用,可依自己喜好選擇。