std::vector<T,Allocator>::shrink_to_fit
void shrink_to_fit(); |
(constexpr seit C++20) | |
Fordert die Entfernung von ungenutztem Speicherplatz an.
Es ist eine unverbindliche Anfrage, capacity() auf size() zu reduzieren. Es hängt von der Implementierung ab, ob die Anfrage erfüllt wird.
Wenn eine Neuzuweisung stattfindet, werden alle Iteratoren (einschließlich des end()-Iterators) und alle Referenzen auf die Elemente ungültig. Wenn keine Neuzuweisung stattfindet, werden keine Iteratoren oder Referenzen ungültig.
|
Wenn |
(seit C++11) |
Inhalt |
[bearbeiten] Komplexität
Höchstens linear in der Größe des Containers.
AusnahmenWenn eine Ausnahme ausgelöst wird, die nicht vom Move-Konstruktor eines nicht CopyInsertable |
(seit C++11) |
[bearbeiten] Hinweise
In libstdc++ ist shrink_to_fit() im C++98-Modus nicht verfügbar.
[bearbeiten] 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
[bearbeiten] Fehlerberichte
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 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 war nicht erforderlich, MoveInsertable zu sein (C++11) |
1. hinzugefügt 2. gefordert |
| LWG 2223 | C++98 C++11 |
1. Referenzen, Zeiger und Iteratoren wurden nicht ungültig gemacht (C++98) 2. es gab keine Garantie für die Ausnahme-Sicherheit (C++11) |
1. Sie können ungültig gemacht werden 2. hinzugefügt |
[bearbeiten] Siehe auch
| Gibt die Anzahl der Elemente zurück (public member function) | |
| Gibt die Anzahl der Elemente zurück, die im derzeit zugewiesenen Speicher gehalten werden können (public member function) |