从中间擦除,指针丢失

Deque erase from middle, is pointer lost?

本文关键字:指针 中间 擦除      更新时间:2023-10-16

我经常擦除队列中间的元素。deque中元素的内存地址在其他地方使用。从deque中删除中间元素是否会使所有指向deque的指针像vector一样失效?我应该切换到列表吗?(我遍历整个队列)

我试图阅读deque实现,但它是复杂的,我不明白它是否作为一个列表或向量。

我正在使用visualc++ std实现deque.

是。在中间插入会使所有迭代器和对元素的引用(以及指向元素的指针)失效。在任意一端插入会使所有迭代器失效,但不会使引用或指针失效。你不需要通过阅读实现来发现这些东西;你读了文档。(实现可能实际上允许官方不支持的操作。)

从deque中删除中间元素会使所有指向deque的指针失效吗?

对于deque,所有迭代器和对deque的引用都无效,除非被擦除的成员位于deque的末端(前端或后端)。

对于vector容器,插入点之前的所有迭代器和引用都不受影响,除非新容器的大小大于先前的容量。