std::list<T,Allocator>::operator=
| list& operator=( const list& other ); |
(1) | |
| (2) | ||
list& operator=( list&& other ); |
(seit C++11) (bis C++17) |
|
| list& operator=( list&& other ) noexcept(/* siehe unten */); |
(seit C++17) | |
| list& operator=( std::initializer_list<value_type> ilist ); |
(3) | (seit C++11) |
Ersetzt den Inhalt des Containers.
|
Wenn std::allocator_traits<allocator_type>::propagate_on_container_copy_assignment::value true ist, wird der Allokator von *this durch eine Kopie von other ersetzt. Wenn der Allokator von *this nach der Zuweisung ungleich seinem alten Wert verglichen würde, wird der alte Allokator zum Freigeben des Speichers verwendet, dann wird der neue Allokator zum Alloziieren verwendet, bevor die Elemente kopiert werden. Andernfalls kann der von *this gehaltene Speicher wiederverwendet werden, wenn möglich. In jedem Fall können die ursprünglich zu *this gehörenden Elemente entweder zerstört oder durch elementweise Kopierzuweisungen ersetzt werden. |
(seit C++11) |
Inhalt |
[bearbeiten] Parameter
| Sonstiges | - | ein weiterer Container, der als Datenquelle dient |
| ilist | - | Initialisierungsliste, die als Datenquelle dient |
[bearbeiten] Rückgabewert
*this
[bearbeiten] Komplexität
[bearbeiten] Ausnahmen
|
1-3) Kann Implementierungs-definierte Ausnahmen auslösen. |
(bis C++17) |
|
1,3) Kann implementierungsdefinierte Ausnahmen auslösen.
2) noexcept-Spezifikation:
noexcept(std::allocator_traits<Allocator>::is_always_equal::value) |
(seit C++17) |
[bearbeiten] Hinweise
Nach der Container-Move-Zuweisung (Überladung (2)), es sei denn, die elementweise Move-Zuweisung wird durch inkompatible Allokatoren erzwungen, bleiben Referenzen, Zeiger und Iteratoren (außer dem End-Iterator) zu other gültig, verweisen aber auf Elemente, die sich jetzt in *this befinden. Der aktuelle Standard macht diese Garantie durch die allgemeine Aussage in [container.reqmts]/67 und eine direktere Garantie wird durch LWG issue 2321 in Betracht gezogen.
[bearbeiten] Beispiel
Der folgende Code verwendet operator=, um eine std::list einer anderen zuzuweisen
#include <initializer_list> #include <iostream> #include <iterator> #include <list> void print(auto const comment, auto const& container) { auto size = std::size(container); std::cout << comment << "{ "; for (auto const& element : container) std::cout << element << (--size ? ", " : " "); std::cout << "}\n"; } int main() { std::list<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); }
Ausgabe
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 }[bearbeiten] Siehe auch
konstruiert die list(public member function) | |
| weist dem Container Werte zu (public member function) |