2

C++ 标准是否保证当将一个新元素推回双端队列时,所有预先存在的元素都不会被重定位到新的内存地址?

4

1 回答 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 回答