STL容器分为序列式容器和关联式容器:
-
序列式容器:
-
vector、list、deque等
-
-
关联式容器:
-
set、map、unordered_map、unordered_map等
-
对于序列式容器(list除外),对某节点操作时,会使对应节点及其后续迭代器失效
-
vector
-
push_back():在元素末尾添加元素,当还有空间时,只会使尾迭代器失效。当空间已满,会将原数组拷贝到扩容后的新数组,使原迭代器全部失效。
-
pop_back():尾删除,会使尾迭代器失效。
-
insert():当有剩余空间时,会使插入点及以后的迭代器失效,无剩余空间时,所有迭代器全部失效
-
erase():删除点及其以后的迭代器全部失效
-
-
deque
-
push_back():使尾迭代器失效
-
push_front():使头迭代器失效
-
pop_back():使尾迭代器失效
-
pop_front():使头迭代器失效
-
insert()和erase():判断插入或删除点前后的元素数量,如果前方元素数量较少,则将前方所有元素向前移动,使插入点及其以前的迭代器全部失效。如果后方元素数量较少,则将后方所有元素向后移动,使插入点及其以后的迭代器全部失效。
-
-
list
-
由于list是用指针连接各个节点的,所以对节点进行操作时,只会使当前的迭代器失效,不会影响其他迭代器。
-
-
关联式容器
-
同list,只会影响当前节点的迭代器,不会对其他迭代器产生影响。
-
erase()函数使用后迭代器的变化
-
序列式容器
-
使用后返回下一个迭代器,则使用时应该 ite=vec.erase(ite);
-
-
关联式容器
-
使用后不返回下一个迭代器,需要ite++ ,s.erase(ite++);
-