我经常从我的双端中间擦除元素。 deque中元素的内存地址在其他一些地方使用。从deque中删除中间元素是否像向量一样删除所有指向deque的指针?我应该切换到列表吗?(无论如何我都会迭代整个deque)
我试图阅读deque实现,但它很复杂,我不明白它是否作为列表或向量。
我正在使用deque的visualc ++ std实现。
答案 0 :(得分:3)
是。中间的插入使所有迭代器和对元素的引用(以及指向元素的指针)无效。两端的插入使所有迭代器无效,但不会使引用或指针无效。你没有阅读实现来找出这些东西;你阅读了文档。 (实现可能实际上允许未正式支持的操作。直到下一个错误修复。)
答案 1 :(得分:2)
是否从deque中删除了中间元素,所有指向deque的指针都像向量一样?
如果有双端队列,所有迭代器和对双端队列的引用都将失效,除非被擦除的成员位于双端队列的末端(前面或后面)。
对于向量,插入点之前的所有迭代器和引用都不受影响,除非新容器大小大于先前的容量。