Namespaces
Variants

std::vector<T,Allocator>:: shrink_to_fit

From cppreference.net

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 T nicht MoveInsertable in std:: vector < T, Allocator > ist, ist das Verhalten undefiniert.

(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 T stammt, gibt es keine Auswirkungen.

(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)