序列式容器vector,deque
使用erase删除迭代器后,后面的元素的迭代器会失效。但是erase会返回下一个有效的迭代器。
int main() {
vector<int> v{ 1,2,3,4 };
vector<int>::iterator it = find(v.begin(), v.end(), 1);
auto it1 = v.erase(it);
cout << *it1 << endl;
}
上面代码输出2.
关联式容器set,map
使用erase删除迭代器后,当前元素的迭代器失效,但是后面的元素的迭代器还有效。这就需要记录下一个元素的迭代器了。
int main() {
set<int> s{ 1,2,3,4 };
set<int>::iterator it2 = s.find(1);
s.erase(it2++);
cout << *it2 << endl;
}
上面代码输出2.
序列式容器list
erase会返回下一个有效的迭代器,因此可以使用vector的方法。分配的内存不是连续的,因此可以采用set的方法。
int main() {
list<int> l{ 1,2,3,4 };
list<int>::iterator it3 = find(l.begin(), l.end(), 1);
auto it4 = l.erase(it3);
cout << *it4 << endl;
}
int main() {
list<int> l{ 1,2,3,4 };
list<int>::iterator it5 = find(l.begin(), l.end(), 1);
l.erase(it5++);
cout << *it5 << endl;
}
上面代码都输出2.