std::deque<T,Allocator>:: resize
|
void
resize
(
size_type count
)
;
|
(1) | (constexpr seit C++26) |
|
void
resize
(
size_type count,
const
value_type
&
value
)
;
|
(2) | (constexpr seit C++26) |
Ändert die Größe des Containers, um count Elemente zu enthalten:
- Wenn count gleich der aktuellen Größe ist, erfolgt keine Aktion.
- 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:
Inhaltsverzeichnis |
Parameter
| count | - | neue Größe des Containers | ||
| value | - | der Wert, mit dem die neuen Elemente initialisiert werden | ||
| Typanforderungen | ||||
-
|
||||
Komplexität
Linear in der Differenz zwischen der aktuellen Größe und count .
Hinweise
Wenn die Wertinitialisierung in Überladung
(
1
)
unerwünscht ist, zum Beispiel wenn die Elemente von Nicht-Klassen-Typ sind und das Nullsetzen nicht benötigt wird, kann dies durch Bereitstellung eines
benutzerdefinierten
Allocator::construct
vermieden werden.
Beispiel
#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
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrektes Verhalten |
|---|---|---|---|
| LWG 679 | C++98 |
resize()
übergab
value
als Wert
|
übergibt als const-Referenz |
| LWG 1418 | C++98 | das Verhalten von resize ( size ( ) ) war nicht spezifiziert | spezifiziert |
| LWG 2033 | C++11 |
1. Elemente wurden durch Verwendung von
erase()
[1]
entfernt
2.
T
musste nicht
MoveInsertable
sein
|
1. verwendet
pop_back()
2. erforderlich |
| LWG 2066 | C++11 |
Überladung
(
1
)
hatte nicht die Exception
Safety-Garantie der Überladung ( 2 ) |
hinzugefügt |
| LWG 2160 | C++11 |
Elemente wurden durch Verwendung von
pop_back()
[2]
entfernt
aufgrund der Lösung von LWG 2033 |
spezifiziert die Methode
zum Entfernen von Elementen nicht |
-
↑
erase()
kann Elemente in der Mitte eines
dequeentfernen, daher muss der Werttyp MoveAssignable sein, damit die nachfolgenden Elemente nach vorne verschoben werden können, um die Lücke zu füllen. Allerdings kannresize()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.
Siehe auch
|
gibt die maximal mögliche Anzahl von Elementen zurück
(öffentliche Elementfunktion) |
|
|
gibt die Anzahl der Elemente zurück
(öffentliche Elementfunktion) |
|
|
prüft, ob der Container leer ist
(öffentliche Elementfunktion) |