2 回答

TA貢獻1777條經驗 獲得超10個贊
對 list 和 vector 來說,它們的 erase 函數會返回下一個迭代器,因此在遍歷時,只需要 it = c.erase(it); 即可。
對 map 和 set 來說,它們的 erase 函數返回的 void,而在進行 erase 之后,當前迭代器會失效,無法再用于獲取下一個迭代器。因此需要 erase 之前就獲取指向下一個元素的迭代器。如:
tmpIt = it; ++it; c.erase(tmpIt);
利用后綴++操作符的特性(先創建副本,然后再遞增迭代器,然后返回副本)上面的三行代碼可以簡化為一行:
c.erase(it++);
list 正向遍歷刪除元素示例(vector 用法相同):
// erase with iterator
list<int>::iterator it;
for (it = l.begin(); it != l.end();)
{
if (0 == (*it) % 2) {
it = l.erase(it);
}
else {
++it;
}
}
map 正向遍歷刪除元素示例(set 用法相同):
// erase with iterator
map<int, int>::iterator mit;
for (mit = m.begin(); mit != m.end();)
{
if (0 == mit->first % 2) {
m.erase(mit++);
}
else {
++mit;
}
}
- 2 回答
- 0 關注
- 792 瀏覽
添加回答
舉報