2010-08-07 4 views
0

Par exemple, est-ce valable?Nombre d'itérateurs actifs autorisés dans un vecteur

std::vector<int> vec(5, 0); 
std::vector<int>::const_iterator it1(vec.begin()); 
std::vector<int>::const_iterator it2(vec.begin()); 
//Use it1 and it2 like they don't know about each other. 

Existe-t-il un nom spécial pour un conteneur qui autorise plusieurs itérateurs actifs?

Répondre

1

Oui, c'est valide.

Vous pouvez avoir autant d'itérateurs dans un vecteur que votre système dispose de mémoire pour contenir les itérateurs.

Le nom spécial de ce type de conteneur est "tout conteneur STL". Tous les conteneurs permettent cela. Peut-être que vous pourriez expliquer pourquoi vous pensez que cela ne devrait pas être autorisé?

0

Tant que vous ne faites pas d'opérations qui rendent les autres itérateurs invalides, il n'y a aucune limite sur le nombre d'itérateurs. Certaines opérations (comme insérer ou supprimer) peuvent rendre tous les autres itérateurs invalides. Le fonctionnement des itérateurs de conteneur STL ne leur permet pas (généralement) de gérer les opérations d'insertion et de suppression effectuées via d'autres itérateurs.

Notez que l'utilisation de fonctions de conteneur pour insérer/supprimer des éléments rendra également les itérateurs invalides. Le problème sous-jacent est que les conteneurs STL ne connaissent rien des itérateurs actifs, ils ne peuvent donc pas dire aux itérateurs que quelque chose a changé.

0

C'est absolument permis. La chose dont vous devez vous préoccuper est de commencer à effacer ou à insérer des éléments. Différents conteneurs ont un comportement différent pour l'invalidation des itérateurs en modifiant les fonctions, vous devrez regarder la documentation. erase sur un vector, par exemple, invalide tous les itérateurs et références d'éléments après l'élément qui a été effacé.

Questions connexes