加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – deque插入迭代器与指针的无效(引用)

发布时间:2020-12-16 09:48:28 所属栏目:百科 来源:网络整理
导读:参见英文答案 C++ deque’s iterator invalidated after push_front()????????????????????????????????????1个 基于cplusplus.com的引文 如果插入发生在序列的开头或结尾,则与此容器相关的所有迭代器都将失效,但指针和引用仍然有效,指的是它们在调用之前引
参见英文答案 > C++ deque’s iterator invalidated after push_front()????????????????????????????????????1个
基于cplusplus.com的引文

如果插入发生在序列的开头或结尾,则与此容器相关的所有迭代器都将失效,但指针和引用仍然有效,指的是它们在调用之前引用的相同元素.

为什么插入到前面或末尾会使迭代器无效而对指针和引用无效?

解决方法

基本上,deque可以被认为是向量< array< T> *>.

换句话说,它包含一个小的“索引”向量,其中包含指向一系列固定大小数组的指针.当您在双端队列的开头或末尾插入时,它会填充第一个/最后一个数组,然后在必要时添加另一个数组,因此它永远不需要移动现有元素.这就是指针/引用不会失效的原因.

但是,因为此“索引”存储在类似向量的内容中,所以在调整大小时可能会复制并重新分配,因此每次将新数组添加到索引时,索引都可能会复制到不同的内存位置.

迭代器需要足够了解容器才能迭代它.换句话说,仅知道当前指向的特定元素位于何处是不够的,还需要知道它所属的数组,以及索引所在的位置,因此它可以找到下一个/前一个数组.

因此,使“索引”无效的操作也会使迭代器失效,因为虽然它们仍可能指向有效元素,但它们不再能够遍历整个双端队列.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读