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 :

Acceder à une valeur intermediaire de list sans itérator


Sujet :

C++

  1. #1
    En attente de confirmation mail
    Inscrit en
    Avril 2004
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 83
    Points : 54
    Points
    54
    Par défaut Acceder à une valeur intermediaire de list sans itérator
    Bonjour,

    j'aimerai savoir si il est possible d'accéder à la n-ième valeur d'une list sans iterator.

    Pour la première valeur, l'accès se fais par malist.front(), pour la dernière, ça se fait par malist.back()
    mais pour accéder à une valeur qui n'est, ni au début , ni à la fin , existe-t-il une procédure ???

    MErci

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 366
    Points : 440
    Points
    440
    Par défaut
    sans la doc STL sous les yeux, j aurais tendance a dire non car :

    la STL evite de proposer des services qui ne sont pas optimum pour un container donnees ...

    si tu a besoin de faire du random acces alors il faut eviter la list<>. !!

  3. #3
    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 : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Cette question revient au moins une fois tous les mois.

    La réponse est toujours la même : std::list ne prévoit pas une telle fonctionnalité les listes chaînées ne sont pas prévues pour ça. Et puis même si une telle fonction existait, il ne faut pas rêver, elle serait implémentée avec un parcours séquentiel.

    Si tu tiens tout de même à le faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::list<x>::iterator it = l.begin();
    std::advance(it, 5);

  4. #4
    En attente de confirmation mail
    Inscrit en
    Avril 2004
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 83
    Points : 54
    Points
    54
    Par défaut
    Merci pour la réponse.
    J'avais déjà lu les topics existants et étais tombé sur un ou tu expliquait cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::list<x>::iterator it = l.begin();
    std::advance(it, 5);
    Je m'en servirais donc si il n'y a pas d'autres solutions !

    Merci

  5. #5
    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 : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Je m'en servirais donc si il n'y a pas d'autres solutions !
    Il n'y en n'a pas, à moins de coder les choses différemment en amont. Si ton indice vient d'un parcours alors utilise directement un itérateur. Si ton indice provient d'une recherche alors pareil, il faut manipuler uniquement des itérateurs. En fait je ne vois pas comment tu peux en venir à manipuler un indice sur une liste ?

  6. #6
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 629
    Points : 30 692
    Points
    30 692
    Par défaut
    Salut,

    Et n'oublie quand meme pas qu'aux niveaux des performances, un code du genre de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::list<x>::iterator it = l.begin();
    std::advance(it, 5);
    sera de toutes façons identique à un code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    std::list<x>::iterator it = l.begin();
    for(int i=0;i<5;i++)
        it++;
    Le seul conteneur qui permette l'acces aléatoire aux élément est le std::vector, simplement, pour une question de sémantique: un tableau permet l'acces aléatoire, alors qu'une pile, une file, une liste ou un arbre binaire ne permettent que des acces séquentiels...

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Points : 240
    Points
    240
    Par défaut
    Cela dit si tu as un besoin récurrent d'accèder à une n-ième valeur de ta liste, tu as tout interet à utiliser un vecteur à ce compte là.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. TreeMap, acceder à une valeur par ordre.
    Par Djobird dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 15/05/2007, 15h00
  2. Modifier une valeur dans un fichier sans passer par l'éditeur
    Par elkhy dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 09/06/2006, 00h15
  3. sélectionner une valeur d'un liste box par le l'ascenceur
    Par marco62118 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 02/05/2006, 13h13
  4. Modifer une valeur dans un panier sans la valider
    Par budiste dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 01/03/2006, 09h53
  5. [sous formulaire] acceder à une valeur
    Par debdev dans le forum Access
    Réponses: 2
    Dernier message: 28/10/2005, 09h59

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