OVH Cloud OVH Cloud

[STL] clear vs resize(0)

11 réponses
Avatar
Amerio
Bonjour,
La fonction clear() d'un std::vector "vide" le conteneur (mise a 0 de la
taille, et destruction des elements contenus).
Mais sur PC (VS 2003), clear() désalloue egalement toute la place réservé
par le vector (si j'avais fais un reserve(100) avant, alors apres le clear
c'est retombé a 0).
Si je remplace clear() par resize(0), alors la mémoire reservée n'est pas
perdue.
Questions :
- le comportement de clear() est il normalisé (vis a vis de reserve() ) ?
- peut il y a voir une impémenattion ou resize(0) fait _exactement_ comme
clear() ?
- y a t il une methode "standard" pour vider un conteneur, sans perdre
l'effet de "reserve()" ?
Merci !

1 réponse

1 2
Avatar
kanze
(drkm) wrote in message
news:...
wrote in message
:

Dans la pratique, ce n'est pas possible à implémenter et aussi
respecter les contraints de complexité donnée (par exemple, pour
swap), voir les DR 101 et 341.


Merci pour ces références. Intéressant, le DR 101 ; je ne
connaissais pas le coup du

std::vector< T >( v ).swap( v ) ;

Mais si je comprend bien, cela n'est valable que pour les
implémentations respectant le DR 341 ?


En général, quoique ce soit n'est valable que pour les implémentations
qui le respecte:-). Mais en fait, je crois que cette solution a été
adoptée parce qu'elle marchait déjà avec toutes les implémentations
connues.

--
James Kanze GABI Software http://www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


1 2