std::deque<T,Allocator>:: shrink_to_fit
|
void
shrink_to_fit
(
)
;
|
(constexpr seit C++26) | |
Fordert die Entfernung ungenutzter Kapazität an.
Es handelt sich um eine unverbindliche Aufforderung, den Speicherverbrauch zu reduzieren, ohne die Größe der Sequenz zu ändern. Es hängt von der Implementierung ab, ob die Aufforderung erfüllt wird.
Alle Iteratoren (einschließlich des
end()
Iterators) und alle Referenzen auf die Elemente werden ungültig.
|
Falls
|
(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
|
(seit C++11) |
Hinweise
In libstdc++,
shrink_to_fit()
ist
nicht verfügbar
im C++98-Modus.
Beispiel
#include <cstddef> #include <deque> #include <iostream> #include <new> // Minimal C++11 allocator with debug output. template<class Tp> struct NAlloc { typedef Tp value_type; NAlloc() = default; template<class T> NAlloc(const NAlloc<T>&) {} Tp* allocate(std::size_t n) { n *= sizeof(Tp); std::cout << "allocating " << n << " bytes\n"; return static_cast<Tp*>(::operator new(n)); } void deallocate(Tp* p, std::size_t n) { std::cout << "deallocating " << n*sizeof*p << " bytes\n"; ::operator delete(p); } }; template<class T, class U> bool operator==(const NAlloc<T>&, const NAlloc<U>&) { return true; } template<class T, class U> bool operator!=(const NAlloc<T>&, const NAlloc<U>&) { return false; } int main() { // std::queue has no capacity() function (like std::vector). // Because of this, we use a custom allocator to show the // working of shrink_to_fit. std::cout << "Default-construct deque:\n"; std::deque<int, NAlloc<int>> deq; std::cout << "\nAdd 300 elements:\n"; for (int i = 1000; i < 1300; ++i) deq.push_back(i); std::cout << "\nPop 100 elements:\n"; for (int i = 0; i < 100; ++i) deq.pop_front(); std::cout << "\nRun shrink_to_fit:\n"; deq.shrink_to_fit(); std::cout << "\nDestroy deque as it goes out of scope:\n"; }
Mögliche Ausgabe:
Default-construct deque: allocating 64 bytes allocating 512 bytes Add 300 elements: allocating 512 bytes allocating 512 bytes Pop 100 elements: Run shrink_to_fit: allocating 64 bytes allocating 512 bytes allocating 512 bytes deallocating 512 bytes deallocating 512 bytes deallocating 512 bytes deallocating 64 bytes Destroy deque as it goes out of scope: deallocating 512 bytes deallocating 512 bytes deallocating 64 bytes
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 850 | C++98 |
std::deque
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
(öffentliche Elementfunktion) |