78 votes

Quelle est la valeur par défaut d'un itérateur?

Pour tout conteneur STL que j'utilise, si je déclare un itérateur (de ce type de conteneur particulier) à l'aide du constructeur par défaut de l'itérateur, à quoi l'itérateur sera-t-il initialisé?

Par exemple, j'ai:

 std::list<void*> address_list;
std::list<void*>::iterator iter;
 

À quoi ira-t-on initialisé?

63voto

UncleBens Points 24580

Par convention, un "NULL itérateur" pour les conteneurs, qui est utilisé pour indiquer l'absence de résultat, compare égal au résultat de l' container.end().

 std::vector<X>::iterator iter = std::find(my_vec.begin(), my_vec.end(), x);
 if (iter == my_vec.end()) {
     //no result found; iter points to "nothing"
 }

Cependant, depuis un défaut construit conteneur itérateur n'est pas associé avec n'importe quel récipient, il n'y a pas de bonne valeur, cela pourrait prendre. Donc c'est juste une variable non initialisée et la seule opération à faire est d'attribuer un valide itérateur pour elle.

 std::vector<X>::iterator iter;  //no particular value
 iter = some_vector.begin();  //iter is now usable

Pour d'autres types d'itérateurs cela pourrait ne pas être vrai. E. g dans le cas d' istream_iterator, une valeur par défaut-construit itérateur représente (compare égal à) un istream_iterator qui a atteint les expressions du FOLKLORE d'un flux d'entrée.

28voto

FredOverflow Points 88201

Le constructeur par défaut initialise un itérateur sur une valeur singulière :

Les itérateurs peuvent également avoir des valeurs singulières qui ne sont associées à aucune séquence. [Exemple: après la déclaration d'un pointeur non initialisé x (comme avec int * x;), x doit toujours être supposé avoir la valeur singulière d'un pointeur. -end exemple] Les résultats de la plupart des expressions ne sont pas définis pour les valeurs singulières [24.2.1 §5]

13voto

JesperE Points 34356

L'itérateur n'est pas initialisé, tout comme int x; déclare un entier non initialisé. Il n'a pas de valeur correctement définie.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X