std::deque<T,Allocator>::resize
Von cppreference.com
void resize( size_type count ); |
(1) | |
void resize( size_type count, const value_type& value ); |
(2) | |
Ändert die Größe des Containers auf count Elemente; tut nichts, wenn count == size().
Wenn die aktuelle Größe größer als count ist, wird der Container auf seine ersten count Elemente reduziert.
Wenn die aktuelle Größe kleiner als count ist, dann
1) Werden zusätzliche standardmäßig eingefügte Elemente angehängt.
2) Werden zusätzliche Kopien von value angehängt.
Inhalt |
[editieren] Parameter
| zählt | - | neue Größe des Containers |
| value | - | der Wert, mit dem die neuen Elemente initialisiert werden sollen |
| Typanforderungen | ||
-T muss die Anforderungen von MoveInsertable und DefaultInsertable erfüllen, um Überladung (1) verwenden zu können. | ||
-T muss die Anforderungen von CopyInsertable erfüllen, um Überladung (2) verwenden zu können. | ||
[editieren] Komplexität
Linear in der Differenz zwischen der aktuellen Größe und count.
Anmerkungen
Wenn die Wertinitialisierung in Überladung (1) unerwünscht ist, zum Beispiel, wenn die Elemente von einem nicht-Klassen-Typ sind und kein Nullsetzen benötigt wird, kann dies durch die Bereitstellung eines benutzerdefinierten Allocator::construct vermieden werden.
[editieren] Beispiel
Führen Sie diesen Code aus
#include <deque> #include <iostream> void print(auto rem, const std::deque<int>& c) { for (std::cout << rem; const int el : c) std::cout << el << ' '; std::cout << '\n'; } int main() { std::deque<int> c = {1, 2, 3}; print("The deque holds: ", c); c.resize(5); print("After resize up to 5: ", c); c.resize(2); print("After resize down to 2: ", c); c.resize(6, 4); print("After resize up to 6 (initializer = 4): ", c); }
Ausgabe
The deque holds: 1 2 3 After resize up to 5: 1 2 3 0 0 After resize down to 2: 1 2 After resize up to 6 (initializer = 4): 1 2 4 4 4 4
Defect reports
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 679 | C++98 | resize() übergab value per Wert |
übergibt per const-Referenz |
| LWG 1418 | C++98 | das Verhalten von resize(size()) war nicht spezifiziert | spezifiziert |
| LWG 2033 | C++11 | 1. Elemente wurden durch Aufruf von erase() entfernt[1] 2. T musste nicht MoveInsertable sein |
1. verwendet pop_back() 2. gefordert |
| LWG 2066 | C++11 | Überladung (1) hatte nicht die Ausnahme Sicherheitsgarantie von Überladung (2) |
hinzugefügt |
| LWG 2160 | C++11 | Elemente wurden durch Aufruf von pop_back() entfernt[2] aufgrund der Auflösung von LWG 2033 |
spezifiziert nicht die Methode des Entfernens von Elementen |
- ↑ erase() kann Elemente in der Mitte eines
dequeentfernen, daher muss der Werttyp MoveAssignable sein, damit die Elemente nach dem entfernten Abschnitt nach vorne verschoben werden können, um die Lücke zu füllen.resize()kann jedoch nur Elemente am Ende desdequeentfernen, wodurch MoveAssignable unnötig wird. - ↑ Das Entfernen von Elementen mittels pop_back() impliziert, dass die Elemente von hinten nach vorne entfernt werden müssen.
[editieren] Siehe auch
| Gibt die maximal mögliche Anzahl von Elementen zurück (public member function) | |
| Gibt die Anzahl der Elemente zurück (public member function) | |
| prüft, ob der Container leer ist (public member function) |