一般考虑除开操作元素本身以外的指针失效,不然都会失效

从不安全到安全的排序:
std::vector、std::deque:
std::unordered_map / std::unordered_set
std::map / std::set
std::list

以下是对各容器类型中 可能导致指针/引用/迭代器失效 的关键操作总结:

容器类型 导致失效的操作 失效范围
std::vector ▶ push_back()emplace_back() (当触发重新分配)
 ▶ insert() (可能触发重新分配)
所有迭代器、指针和引用失效
▶ reserve()resize() (当容量变化)
std::deque ▶ 在中间位置插入/删除元素(如 insert(pos, value)erase(pos) 所有迭代器、指针和引用失效
▶ push_front()push_back() (当中控器需要扩展时,如新的缓冲区被添加) 可能局部失效(具体实现相关)
std::list ▶  (链表结构,增删节点不影响其他元素的指针) 仅被删除元素对应的指针失效
std::unordered_map/unordered_set ▶ insert()rehash() (当触发桶数组的扩容) 所有迭代器、指针和引用失效

5591
5582
5577