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> *>.
换句话说,它包含一个小的“索引”向量,其中包含指向一系列固定大小数组的指针.当您在双端队列的开头或末尾插入时,它会填充第一个/最后一个数组,然后在必要时添加另一个数组,因此它永远不需要移动现有元素.这就是指针/引用不会失效的原因. 但是,因为此“索引”存储在类似向量的内容中,所以在调整大小时可能会复制并重新分配,因此每次将新数组添加到索引时,索引都可能会复制到不同的内存位置. 迭代器需要足够了解容器才能迭代它.换句话说,仅知道当前指向的特定元素位于何处是不够的,还需要知道它所属的数组,以及索引所在的位置,因此它可以找到下一个/前一个数组. 因此,使“索引”无效的操作也会使迭代器失效,因为虽然它们仍可能指向有效元素,但它们不再能够遍历整个双端队列. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 在php中判断一个请求是ajax请求还是普通请求的方法
- c# – 使用Configure方法时如何在代码中设置WCF基址
- ORACLE用SYS登录报ORA-28009:connection as SYS should be
- ruby-on-rails – Rspec 3 Rails 4带参数的模拟链式方法调用
- c# – 在Windows Phone中以圆形显示图像
- Objective-C:自定义BOOL访问器(getter和setter)方法
- c – 如何检查窗口是否设置了WS_VISIBLE? (或者如果可见)
- 在Swift 3中声明URL
- [Swift Weekly Contest 116]LeetCode962. 最大宽度坡 | Max
- reactjs – 如何在React中重定向到另一个路由时传递状态/道