2013-02-24 1 views

Répondre

4

Oui. Les documentation pour boost::ptr_vector<T> états:

A ptr_vector<T> est un conteneur de pointeur qui utilise un std::vector<void*> pour stocker les pointeurs sous-jacents.

et en insérant des éléments en ou effacer des éléments d'un std::vector peut provoquer réallocation et donc itérateurs existante à invalidée.

Plus précisément, §23.3.6.5/3 11 C++ Unis environ erase():

(3) ects E ff: Invalide itérateurs et des références au ou après le point de l'effacement.

et environ insert() et push_back():

(1) Remarques: Causes réallocation si la nouvelle taille est supérieure à l'ancienne capacité. Si aucune réallocation ne se produit, tous les itérateurs et références avant le point d'insertion restent valides.

Par conséquent, pour éviter iterator infirmation dans le cas d'insertion d'éléments, vous pouvez utiliser la fonction reserve() pour augmenter la capacité du vecteur avant d'obtenir des itérateurs de celui-ci. Ces itérateurs resteront alors valides jusqu'à ce que le size() du vecteur dépasse le nombre d'éléments pour lesquels l'espace a été réservé.

Questions connexes