std::vector<T,Allocator>:: resize
|
void
resize
(
size_type count
)
;
|
(1) | (constexpr seit C++20) |
|
void
resize
(
size_type count,
const
value_type
&
value
)
;
|
(2) | (constexpr seit C++20) |
Ändert die Größe des Containers, um count Elemente zu enthalten:
- Wenn count gleich der aktuellen Größe ist, geschieht nichts.
- 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 . Zusätzliche Komplexität möglich aufgrund von Neuzuweisung, wenn die Kapazität kleiner ist als count .
Ausnahmen
Wenn aus irgendeinem Grund eine Exception ausgelöst wird, haben diese Funktionen keine Wirkung (
strong exception safety guarantee
).
Obwohl nicht explizit spezifiziert, wird
std::length_error
ausgelöst, wenn die Kapazität, die der neue
vector
benötigen würde,
max_size()
überschreiten würde.
|
In Überladung
(
1
)
, falls
|
(since C++11) |
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 vermieden werden, indem ein
benutzerdefinierter
Allocator::construct
bereitgestellt wird.
Die Vektorkapazität wird bei der Verkleinerung niemals reduziert, da dies alle Iteratoren ungültig machen würde, während die Spezifikation nur die Iteratoren zu/nach den gelöschten Elementen ungültig macht.
Beispiel
#include <vector> #include <iostream> void print(auto rem, const std::vector<int>& c) { for (std::cout << rem; const int el : c) std::cout << el << ' '; std::cout << '\n'; } int main() { std::vector<int> c = {1, 2, 3}; print("The vector 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 vector 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
`-Tags wurden unverändert belassen - C++-spezifische Begriffe wie "vector", "resize", "initializer" wurden nicht übersetzt - Die Formatierung und Struktur der Webseite wurde vollständig beibehalten
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 1525 | C++98 | das Verhalten von resize ( size ( ) ) war nicht spezifiziert | spezifiziert |
| LWG 2033 | C++11 |
1. Elemente wurden durch
erase()
entfernt
[1]
2. die Typanforderungen von
T
waren inkorrekt
|
1. verwendet
pop_back()
2. korrigiert |
| LWG 2066 | C++11 |
Überladung
(
1
)
hatte keine Exception-Sicherheitsgarantie
wie Überladung ( 2 ) |
hinzugefügt |
| LWG 2160 | C++11 |
Elemente wurden durch
pop_back()
entfernt
[2]
aufgrund der Lösung von LWG 2033 |
spezifiziert die Methode der
Elemententfernung nicht |
-
↑
erase()
kann Elemente in der Mitte eines
vectorentfernen, 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 desvectorentfernen, 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) |
|
|
gibt die Anzahl der Elemente zurück, die im aktuell allozierten Speicher gehalten werden können
(öffentliche Elementfunktion) |
|
|
prüft, ob der Container leer ist
(öffentliche Elementfunktion) |