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

C++ Discussion :

iterator de list i+=2


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 63
    Par défaut iterator de list i+=2
    Hello.

    list<int>::iterator i = hi.begin();
    i+=2;
    hi.erase(i);

    Pourquoi je ne peux pas faire "i+=2;" ? Si je fait "i++; i++;" ça focntionne mais ce n'est pas très pratique...
    N'y a t-il pas moyen de faire plus simple pour supprimer un élement d'une list ?

    Merci d'avance.

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Tu ne peux utiliser l'opérateur += que sur les random access iterator (ceux des vector par exemple). Pour les listes, tu ne pourras te balader que séquentiellement, donc avec ++ et --.

    Tout ce que tu pourras faire c'est cacher les N appels à l'opérateur ++ avec la fonction std::advance :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    list<int>::iterator i = hi.begin();
    std::advance(i, 2);
    hi.erase(i);

  3. #3
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Une des options de conception de la STL est de dire que si une opération est possible de manière efficace avec un conteneur, on la fournit directement, sinon, si elle est possible mais pas de manière efficace, elle est plus ou moins "cachée", accessible indirectement par un algorithme.

    Une alternative aurait été d'essayer d'homogénéiser les interfaces, et dans ce cas, on aurait pu faire += sur tous les types d'itérateurs.

    L'option choisie permet de servir de pense-bête au développeur, qui aura alors naturellement une incitation à écrire du code qui n'est pas une abération en terme d'accès au donnée, sauf s'il le veut vraiment.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

Discussions similaires

  1. Iterator over lists comprehensions ?
    Par ®om dans le forum Général Python
    Réponses: 3
    Dernier message: 27/09/2011, 23h47
  2. iterator via list<Object[]>
    Par Bigoodheart dans le forum Struts 2
    Réponses: 2
    Dernier message: 26/11/2010, 17h56
  3. [list::iterator] une liste d'iterator
    Par kase74 dans le forum Débuter
    Réponses: 17
    Dernier message: 03/02/2009, 11h57
  4. Iterator imbriqués List<List<String>>
    Par blbird dans le forum Struts 2
    Réponses: 1
    Dernier message: 21/01/2009, 11h05
  5. Iterator sur list et fonction const
    Par Pierre.M dans le forum SL & STL
    Réponses: 2
    Dernier message: 16/04/2008, 20h50

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