Namespaces
Variants

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

From cppreference.net

void shrink_to_fit ( ) ;
(constexpr depuis C++20)

Demande la suppression de la capacité inutilisée.

Il s'agit d'une demande non-contraignante pour réduire capacity() à size() . L'implémentation détermine si cette demande est satisfaite.

Si une réallocation se produit, tous les itérateurs (y compris l'itérateur end() ) et toutes les références aux éléments sont invalidés. Si aucune réallocation ne se produit, aucun itérateur ou référence n'est invalidé.

Si T n'est pas MoveInsertable dans std:: vector < T, Allocator > , le comportement est indéfini.

(depuis C++11)

Table des matières

Complexité

Au plus linéaire par rapport à la taille du conteneur.

Exceptions

Si une exception est levée autre que par le constructeur de déplacement d'un CopyInsertable T non, il n'y a aucun effet.

(depuis C++11)

Notes

Dans libstdc++, shrink_to_fit() est non disponible en mode C++98.

Exemple

#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';
}

Sortie possible :

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

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement publié Comportement corrigé
LWG 755 C++98 std::vector ne disposait pas d'opérations explicites de réduction de capacité fourni
LWG 2033 C++98
C++11
1. l'exigence de complexité était manquante (C++98)
2. T n'était pas requis d'être MoveInsertable (C++11)
1. ajoutée
2. requis
LWG 2223 C++98
C++11
1. les références, pointeurs et itérateurs n'étaient pas invalidés (C++98)
2. il n'y avait pas de garantie de sécurité des exceptions (C++11)
1. ils peuvent être invalidés
2. ajoutée

Voir aussi

renvoie le nombre d'éléments
(fonction membre publique)
renvoie le nombre d'éléments pouvant être contenus dans le stockage actuellement alloué
(fonction membre publique)