Namensräume
Varianten
Aktionen

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

Von cppreference.com
< cpp‎ | container‎ | vector
 
 
 
 
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 T nicht in std::vector<T, Allocator> MoveInsertable ist, ist das Verhalten undefiniert.

(seit C++11)

Inhalt

[bearbeiten] Komplexität

Höchstens linear in der Größe des Containers.

Ausnahmen

Wenn eine Ausnahme ausgelöst wird, die nicht vom Move-Konstruktor eines nicht CopyInsertable T stammt, hat dies keine Auswirkungen.

(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) [edit]
Gibt die Anzahl der Elemente zurück, die im derzeit zugewiesenen Speicher gehalten werden können
(public member function) [edit]