C++ 标准是否保证当将一个新元素推回双端队列时,所有预先存在的元素都不会被重定位到新的内存地址?
问问题
132 次
1 回答
3
是的,该标准提供了这样的保证:
23.3.3.4 双端队列修饰符 [lib.deque.modifiers]
iterator insert(const_iterator position, const T& x); iterator insert(const_iterator position, T&& x); iterator insert(const_iterator position, size_type n, const T& x); template <class InputIterator> iterator insert(const_iterator position, InputIterator first, InputIterator last); iterator insert(const_iterator position, initializer_list<T>); template <class... Args> void emplace_front(Args&&... args); template <class... Args> void emplace_back(Args&&... args); template <class... Args> iterator emplace(const_iterator position, Args&&... args); void push_front(const T& x); void push_front(T&& x); void push_back(const T& x); void push_back(T&& x);
1.效果:双端队列中间的插入使所有迭代器和对双端队列元素的引用无效。 在双端队列的任何一端插入都会使双端队列的所有迭代器无效,但不会影响对双端队列元素的引用的有效性。
实际上,对引用没有影响意味着元素不会被重新定位。
根据 C++11 工作草案 N3242=11-0012
于 2013-06-08T20:08:56.250 回答