OVH Cloud OVH Cloud

map : suppression via un itérateur et incrémentation de l'itérateur

11 réponses
Avatar
MGN
bonjour,
une question bête, mais je veux être sûr de ne pas me tromper :-)

_values est un objet map

code :

it=std::find_if(_values.begin(),_values.end(),upper_keys);
while(it!=_values.end())
{
_values.erase(it);
it=std::find_if(it,_values.end(),upper_keys);
// <- ma question est ici
// it=std::find_if(++it,_values.end(),upper_keys);
<- version fausse

}

je supprime l'objet pointé donc il ne faut pas incrémenter
l'itérateur...C'est bien ça ?
Il n'y a pas de risque avec cette écriture ? par exemple si it pointait vers
le dernier élément du conteneur ?
Merci pour vos lumières
Marc

1 réponse

1 2
Avatar
kanze
Marc G wrote:
compilo), soit en changeant juste la STL (par exemple, en
mettant celle de SGI à la place de celle fournie avec le
compilo).


j'ai l'impression que ça se fait pas comme ça avec mon compilo
(C++ Builder 6). J'ai des constantes symboliques définies un
peu partout et propres à mon implémentation. Et puis si des
classes de la VCL utilisent (ce qui me semble très probable)
la STL. Si je change d'implémentation, je risque la
catastrophe. Non ?


En général, oui. Au départ, quand les compilateurs
introduisaient la STL, c'était possible, parce que la STL était
un « en plus », qu'ils ajoutaient comme ça, pour être plus ou
moins conforme. Entre temps, en revanche, ils ont eu le temps de
faire évoluer leurs propres bibliothèques, pour qu'elles se
servent aussi de la STL.

--
James Kanze GABI Software
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