IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SL & STL C++ Discussion :

les iterator et leur fonctionnement


Sujet :

SL & STL C++

  1. #1
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut les iterator et leur fonctionnement
    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

  2. #2
    Membre éclairé Avatar de befalimpertinent
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2007
    Messages : 561
    Par défaut
    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 :
    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));
    Par contre de là à dire qu'il faut privilégier l'iterator au const_iterator ...
    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.

  3. #3
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    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"

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 439
    Par défaut
    Citation Envoyé par befalimpertinent Voir le message
    Par contre de là à dire qu'il faut privilégier l'iterator au const_iterator ...
    Dr. Dobb's écrit :
    Citation Envoyé par Three Guidelines for Effective Iterator Usage, Guideline 1: Prefer iterator to const_iterator, reverse_iterator, and const_reverse_iterator
    The thing to notice is that these functions [insert, erase] demand parameters of type iterator. Not const_iterator, not reverse_iterator, not const_reverse_iterator. Always iterator.
    [...]
    I wrote that const iterators are “largely” useless if you want to specify insertion positions or elements to be erased.
    [...]
    It may be changed in the future, however
    Ce qui a été décidé comme étant une possible évolution future par le comité, voir C++ Standard Library Defect Report List, issue 180 :
    Citation Envoyé par LWG Issue 180 : Container member iterator arguments constness has unintended consequences
    Proposed resolution:

    Change all non-const iterator parameters of standard library container member functions to accept const_iterator parameters. Note that this change applies to all library clauses, including strings.

  5. #5
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    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

  6. #6
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par r0d Voir le message
    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
    Ca c'est un chouette idée parain

Discussions similaires

  1. Réponses: 29
    Dernier message: 07/08/2012, 06h55
  2. [VBA]Compter les cellules selon leurs couleurs...
    Par ronron1978 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 31/01/2006, 15h27
  3. Réponses: 1
    Dernier message: 20/12/2005, 19h50
  4. Lister les process avec leurs arguments
    Par jamfr73 dans le forum MFC
    Réponses: 5
    Dernier message: 23/12/2004, 10h54
  5. Réponses: 4
    Dernier message: 13/12/2004, 20h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo