C++中哪些容器的删改操作会导致指针失效?
一般考虑除开操作元素本身以外的指针失效,不然都会失效
从不安全到安全的排序:
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
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Min的博客!
评论
