"insert"对德克的引用有什么影响?
What effect does "insert" have on references to deques?
我正在我的一个C++程序中使用deque
,并且正在阅读有关 cppreference.cominsert
的文档。除了这一部分之外,大部分都是有意义的:
(包括过去结束迭代器)都将失效。 除非
pos == begin()
或pos == end()
,否则参考文献也无效, 在这种情况下,它们不会失效。
这是什么意思?这是说对 deque 本身的引用无效,还是对其元素的引用,还是对迭代器的引用?还是完全别的什么?
这是有问题的文档的链接:http://en.cppreference.com/w/cpp/container/deque/insert
deque
是一个对象。它是一个容器,因此它的内部存储中包含其他对象。这些是存储在deque
中的元素。
您可以访问这些元素。访问元素基本上是从容器中获取引用。如果选中它,元素访问部分下的所有方法都将返回reference
类型。
您可以创建访问元素的副本,但可以存储引用本身。T foo = d.front();
vsT& bar = d.front();
.(让我们d
成为一些std::deque<T>
)
对双面体的引用将是auto& ref_d = &d;
。这是另一回事。
所以:
1. "插入"对十进制的引用有什么影响?
没有。引用d
很好。
2. 这是什么意思?
双端式的设计方式是,在开头或结尾插入不会使对可能已存储的元素的引用无效。虽然如果你在中间插入,元素可能会在内存中移动。请注意,不会触及bar
。正是因为它不可能,它才失效。先前获得的引用(或迭代器)不再指向任何有意义的内容,因此取消引用是非法的。
3. 这是否意味着对 deque 本身的引用是无效的?
不,如 1。
4. 或对其元素的引用[无效]?
是的,如 2。
5. 或对迭代器的引用[无效]?
你似乎又混淆了什么是什么。如果从deque
获取迭代器,则std::deque<T>::iterator& iter_ref;
对迭代器的引用。例如auto iter = d.begin();
并引用它iter_ref = &iter;
,insert
不会使*iter_ref
非法,它会使迭代器无效,因此*iter
是非法的(或**ref_iter
)。
注意:我并不是说像std::deque<T>& ref_d
或std::deque<T>::iterator& iter_ref
这样的东西有意义,但这是"引用deque"和"引用交互者"的语义含义。
- 重载运算符的范围是什么?它是否会影响作为类成员的集合的插入函数?
- 处理影响跨不同线程共享对象的定时回调的最佳方法是什么?
- 明确定义'static const variable in a struct'对C++ 11 及以上有什么影响吗?
- 在C++中使用异常的可能的错误处理策略是什么,它们的后果和影响是什么
- GSL 的预期 (cond) 对运行时施加的性能影响是什么?
- 传递const引用参数的意义是什么?它会产生重大影响吗
- 链接到CMake目标会产生什么影响
- "insert"对德克的引用有什么影响?
- 如果订购有什么影响..否则如果按概率陈述
- 在括号内包装初始化列表的影响是什么?
- 对象分配对二进制大小的影响是什么
- 更改静态库的"动态 RTL"设置有什么影响?
- 直接索引访问与"high"内存使用量相比的理论影响是什么? "shifted"使用"low"内存使用情况的索引访问?
- 向上转换为基类对象而不是引用有什么不良影响
- "int a(); "在C++有什么影响?
- __attribute__(__packed__))对嵌套结构有什么影响?
- dlopen是否重新加载已加载的依赖项?如果是,会产生什么影响
- 在docker中编译不同内核的代码会受到什么影响?
- 函数的返回类型对c++程序有什么影响?
- 如果在Cygwin中出现段错误,会有什么影响