std::deque<T,Allocator>::operator=
deque& operator=( const deque& other ); |
(1) | (constexpr since C++26) |
(2) | ||
deque& operator=( deque&& other ); |
(since C++11) (until C++17) |
|
deque& operator=( deque&& other ) noexcept(/* see below */); |
(since C++17) (constexpr since C++26) |
|
deque& operator=( std::initializer_list<value_type> ilist ); |
(3) | (since C++11) (constexpr since C++26) |
Replaces the contents of the container.
Let traits
be std::allocator_traits<allocator_type>:
If traits::propagate_on_container_copy_assignment::value is true, the allocator of *this is replaced by a copy of other. If the allocator of *this after assignment would compare unequal to its old value, the old allocator is used to deallocate the memory, then the new allocator is used to allocate it before copying the elements. Otherwise, the memory owned by *this may be reused when possible. In any case, the elements originally belonging to *this may be either destroyed or replaced by element-wise copy-assignment. |
(since C++11) |
Contents |
[edit] Parameters
other | - | another container to use as data source |
ilist | - | initializer list to use as data source |
[edit] Return value
*this
[edit] Complexity
[edit] Exceptions
2)
noexcept specification:
noexcept(std::allocator_traits<Allocator>::is_always_equal::value) |
(since C++17) |
[edit] Notes
After container move assignment (overload (2)), unless element-wise move assignment is forced by incompatible allocators, references, pointers, and iterators (other than the end iterator) to other remain valid, but refer to elements that are now in *this. The current standard makes this guarantee via the blanket statement in [container.reqmts]/67, and a more direct guarantee is under consideration via LWG issue 2321.
[edit] Example
The following code uses operator= to assign one std::deque to another:
#include <initializer_list> #include <iostream> #include <iterator> #include <deque> void print(const auto comment, const auto& container) { auto size = std::size(container); std::cout << comment << "{ "; for (const auto& element : container) std::cout << element << (--size ? ", " : " "); std::cout << "}\n"; } int main() { std::deque<int> x{1, 2, 3}, y, z; const auto w = {4, 5, 6, 7}; std::cout << "Initially:\n"; print("x = ", x); print("y = ", y); print("z = ", z); std::cout << "Copy assignment copies data from x to y:\n"; y = x; print("x = ", x); print("y = ", y); std::cout << "Move assignment moves data from x to z, modifying both x and z:\n"; z = std::move(x); print("x = ", x); print("z = ", z); std::cout << "Assignment of initializer_list w to z:\n"; z = w; print("w = ", w); print("z = ", z); }
Output:
Initially: x = { 1, 2, 3 } y = { } z = { } Copy assignment copies data from x to y: x = { 1, 2, 3 } y = { 1, 2, 3 } Move assignment moves data from x to z, modifying both x and z: x = { } z = { 1, 2, 3 } Assignment of initializer_list w to z: w = { 4, 5, 6, 7 } z = { 4, 5, 6, 7 }
[edit] See also
constructs the deque (public member function) | |
assigns values to the container (public member function) |