juste pour ceux qui voudrai savoir quoi faire avec les iterator,
voici un article que je viens de trouver :
http://www.ddj.com/cpp/184401406
il explique comment les manipuler, comment passer d'un iterator a un reverse_iterator
....
Vraiment pas mal
juste pour ceux qui voudrai savoir quoi faire avec les iterator,
voici un article que je viens de trouver :
http://www.ddj.com/cpp/184401406
il explique comment les manipuler, comment passer d'un iterator a un reverse_iterator
....
Vraiment pas mal
Ouais très intéressant. Surtout l'astuce que je ne connaissais pas pour obtenir un iterator à partir d'un const_iterator.
Pour ceux qui ont la flemme de tout lire :
Par contre de là à dire qu'il faut privilégier l'iterator au const_iterator ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 typedef deque<int> IntDeque; typedef IntDeque::iterator Iter; typedef IntDeque::const_iterator ConstIter; IntDeque d; ConstIter ci; ... // make ci point into d // initialize i to d.begin() Iter i(d.begin()); // move i up to where ci is advance(i, distance(i, ci));
On m'a toujours appris q'une bonne variable ( ou objet) était une variable (ou objet) const. Ainsi sauf si ma fonction modifie mon container, je passe toujours celui en référence constante ce qui implique d'utiliser des const_iterator.
Je trouve, mais ce n'est que mon avis, bien dangereux de chercher à utiliser à tout prix un iterator non const plutôt qu'un const et ce malgré tout les inconvénients énumérés dans l'article.
Je continuerai à utiliser comme choix par défaut des const_iterator et seulement si je dois & je peux modifier mon container alors j'utiliserai un iterator.
perso,
ce qui m'as vraiment été utile est comment passe d'un reverse_iterator à un iterator.
exemple de code pour enlever les espace et tab entourant une valeur:
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 //foncteur qui test si un caratère est un espase ou un tab bool testChar(const char &c) { return c!=' ' && c!='\t'; } ... std::string tmp(" \ t essai blabla\t \t "); std::string::iterator it1 = std::find_if(tmp.begin(),tmp.end(),&testChar); std::string::iterator it2 =std::find_if(tmp.rbegin(),tmp.rend(),&testChar).base(); std::string value(it1,it2);//value vaut "essai blabla"
Dr. Dobb's écrit :
Ce qui a été décidé comme étant une possible évolution future par le comité, voir C++ Standard Library Defect Report List, issue 180 :Envoyé par Three Guidelines for Effective Iterator Usage, Guideline 1: Prefer iterator to const_iterator, reverse_iterator, and const_reverse_iterator
Envoyé par LWG Issue 180 : Container member iterator arguments constness has unintended consequences
Yop,
voilà qui tombe bien: je comptais ajouter un chapitre sur les iterateurs dans mon papier sur les algos (sur les conseils de Luc). Voilà un article qui va m'y aider grandement![]()
Partager