std::vector<T,Allocator>:: shrink_to_fit
|
void
shrink_to_fit
(
)
;
|
(constexpr seit C++20) | |
Fordert die Entfernung ungenutzter Kapazität an.
Es ist eine unverbindliche Aufforderung, die capacity() auf size() zu reduzieren. Es hängt von der Implementierung ab, ob die Aufforderung erfüllt wird.
Wenn eine Neuzuordnung erfolgt, werden alle Iteratoren (einschließlich des
end()
Iterators) und alle Referenzen auf die Elemente ungültig. Wenn keine Neuzuordnung erfolgt, werden keine Iteratoren oder Referenzen ungültig.
|
Wenn
|
(seit C++11) |
Inhaltsverzeichnis |
Komplexität
Höchstens linear in der Größe des Containers.
Exceptions
Wenn eine Ausnahme ausgelöst wird, die nicht vom Move-Konstruktor eines nicht-
CopyInsertable
|
(since C++11) |
Hinweise
In libstdc++,
shrink_to_fit()
ist
nicht verfügbar
im C++98-Modus.
Beispiel
#include <iostream> #include <vector> int main() { std::vector<int> v; std::cout << "Default-constructed capacity is " << v.capacity() << '\n'; v.resize(100); std::cout << "Capacity of a 100-element vector is " << v.capacity() << '\n'; v.resize(50); std::cout << "Capacity after resize(50) is " << v.capacity() << '\n'; v.shrink_to_fit(); std::cout << "Capacity after shrink_to_fit() is " << v.capacity() << '\n'; v.clear(); std::cout << "Capacity after clear() is " << v.capacity() << '\n'; v.shrink_to_fit(); std::cout << "Capacity after shrink_to_fit() is " << v.capacity() << '\n'; for (int i = 1000; i < 1300; ++i) v.push_back(i); std::cout << "Capacity after adding 300 elements is " << v.capacity() << '\n'; v.shrink_to_fit(); std::cout << "Capacity after shrink_to_fit() is " << v.capacity() << '\n'; }
Mögliche Ausgabe:
Default-constructed capacity is 0 Capacity of a 100-element vector is 100 Capacity after resize(50) is 100 Capacity after shrink_to_fit() is 50 Capacity after clear() is 50 Capacity after shrink_to_fit() is 0 Capacity after adding 300 elements is 512 Capacity after shrink_to_fit() is 300
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 755 | C++98 |
std::vector
fehlten explizite Shrink-to-Fit-Operationen
|
bereitgestellt |
| LWG 2033 |
C++98
C++11 |
1. Die Komplexitätsanforderung fehlte (C++98)
2.
T
musste nicht
MoveInsertable
sein (C++11)
|
1. hinzugefügt
2. erforderlich |
| LWG 2223 |
C++98
C++11 |
1. Referenzen, Zeiger und Iteratoren wurden nicht ungültig (C++98)
2. Es gab keine Ausnahmesicherheitsgarantie (C++11) |
1. sie können ungültig werden
2. hinzugefügt |
Siehe auch
|
gibt die Anzahl der Elemente zurück
(public member function) |
|
|
gibt die Anzahl der Elemente zurück, die im aktuell allokierten Speicherplatz gehalten werden können
(public member function) |