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 :

Piles et itérateur


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2012
    Messages : 17
    Par défaut Piles et itérateur
    Bonjour à tous,

    Je souhaite créer une classe pile afin de stocker des données et d'effectuer des opérations sur ces données. Notamment celle ci :

    SWAP : inversion de l'élément numéro x et l'élément numéro y de la pile (où
    x et y sont les arguments entier de l'opérateur)

    Il me faut donc mettre en place un itérateur afin d'accéder séquentiellement à tous les éléments de la pile. Mais je ne vois pas du tout comment l'implémenter et tout ça reste assez flou pour moi.

    Pourriez vous m'éclairer sur ce point?

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2012
    Messages : 17
    Par défaut
    Hummm, je vois pas bien cob59, tu penses qu'il serait mieux d'utiliser un deque ou c'est juste pour la structure du SWAP ?

    Désolé mais je suis un peu pommé

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533
    Par défaut
    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
    // Création d'une pile d'entiers
    std::deque<int> pile;
    pile.push_back(1);
    pile.push_back(2);
    pile.push_back(3);
    pile.push_back(4);
     
    // Parcours de la pile via un itérateur
    for (auto it=pile.cbegin(), itEnd=pile.cend(); it!=itEnd; ++it)
    {
      cout << *it << endl;
    }
     
    // Echange d'éléments
    std::swap( pile[0], pile[1] );
    Pour échanger des éléments, utilise simplement la fonction std::swap (la fonction membre std::deque<T>::swap permet seulement d'intervertir des deque entre elles).
    Note qu'il existe un type std::stack qui correspond plus exactement à une pile. Il s'agit seulement d'une deque "dégradée", dont l'interface est moins fournie (pas d'itérateurs).

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2012
    Messages : 17
    Par défaut
    Ah je commence à y voir un peu plus clair

    Mais du coup quel est l'intérêt de l'itérateur içi si tu peux directement accéder aux élément de ta pile avec la fonction SWAP ?

    ps : Quelle est la signification de "auto" dans ton for ?

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533
    Par défaut
    Euh...
    L'itérateur permet de parcourir les éléments de la deque. std::swap n'accède et ne parcourt rien du tout ; il permet seulement d'échanger les deux éléments qu'on lui fournit par référence.

    Quant à auto, il permet de remplacer l'écriture d'un type là où le compilateur peut le déduire lui-même. Sans auto on aurait eu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (std::deque<int>::const_iterator it=pile.cbegin(), itEnd=pile.cend(); it!=itEnd; ++it)
    {
      cout << *it << endl;
    }

  7. #7
    Membre émérite
    Avatar de mitkl
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 364
    Par défaut
    l'utilisation d'auto (C++11) dans ce cas là évite d'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (std::deque<int>::iterator it=pile.cbegin(), itEnd=pile.cend(); it!=itEnd; ++it)
    l'utilisation du mot-clé auto permet de résoudre le type renvoyé par pile.cbegin() au moment de la compilation

    edit : grillé

Discussions similaires

  1. Voir la pile FPU
    Par Qwazerty dans le forum Assembleur
    Réponses: 5
    Dernier message: 11/05/2003, 15h09
  2. Créer des objets sur la pile ?
    Par Cornell dans le forum Langage
    Réponses: 8
    Dernier message: 03/03/2003, 11h47
  3. Etat de la pile sous Linux et Windows
    Par Bibouda dans le forum x86 32-bits / 64-bits
    Réponses: 7
    Dernier message: 16/02/2003, 01h28
  4. La mémoire en Pmode et en Rmode - la pile
    Par le mage tophinus dans le forum Assembleur
    Réponses: 15
    Dernier message: 16/02/2003, 01h00
  5. [TASM] Déclarer le segment de pile
    Par cipher dans le forum x86 16-bits
    Réponses: 2
    Dernier message: 01/10/2002, 03h58

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