std::vector<T,Allocator>:: shrink_to_fit
|
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
|
(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
|
(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) |