2010-06-22 5 views
9

Je vois quelque part, il mentionne:Itérateur de C++ dans les pièges de boucle?

for (itr = files.begin(); itr < files.end(); ++itr) // WRONG 
for (itr = files.begin(); itr != files.end(); ++itr) // ok 

Pourquoi est la première expression ne va pas? J'ai toujours utilisé la première expression et je n'ai eu aucun problème.

Répondre

21

comparaisons Commande telles que <, >, <=, >= travaillera pour itérateurs à accès aléatoire, mais beaucoup d'autres itérateurs (tels que itérateurs bidirectionnel sur les listes liées) soutiennent que l'égalité test (== et !=). En utilisant !=, vous pouvez remplacer le conteneur plus tard sans avoir besoin de modifier autant de code, ce qui est particulièrement important pour le code de modèle qui doit fonctionner avec de nombreux types de conteneurs différents.

7

Il existe différents types d'itérateurs. Seuls les itérateurs à accès aléatoire prennent en charge l'opérateur <. Les autres types d'itérateurs (bidirectionnel, entrée, sortie et avant) ne le font pas. Mais tous les itérateurs prennent en charge les opérateurs == et !=. Par conséquent, votre code fonctionnera avec tous les types d'itérateurs si vous utilisez !=.

5

Le premier ne fonctionne que pour les itérateurs qui supportent operator <, ce qui n'est pas le cas de tous les itérateurs.

Questions connexes