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 :

Implémentation classe d'itérateur/conteneur, soucis


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut Implémentation classe d'itérateur/conteneur, soucis
    J'ai plusieurs problèmes pour implémenter ma classe d'itérateur et de conteneur, je vais commencer par celui-là :

    Ma classe itérateur se sert d'un indice pour accéder à l'élément courant du conteneur.


    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
    16
    class Iterateur
    {
    public:
      // Construction d'un itérateur non initialisé
        Iterateur();
      // Construction à partir d'un conteneur et de l'indice d'un élément du conteneur
            Iterateur( Conteneur * conteneur, size_t position );
            ~Iterateur();
     
     
        private:
            // Le conteneur
            Conteneur * m_conteneur;
     
            // Position courante dans le conteneur
            size_t m_position;
    Et ma classe Conteneur permet de renvoyer des Iterateur const ou non const :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class Conteneur
    {
        public:
            iterator   begin();
            const_iterator begin() const;
            iterator end();
            const_iterator end() const;
    };
    Lorsque j'implémente ma méthode begin() non const, je passe this dans le constructeur d'Iterateur que je renvoie, mais pour la méthode const, il faudrait que je passe par un const_cast<>, or je me dis que le const_cast montre que j'ai mal pensé la chose.

    Des avis ?

  2. #2
    Membre éprouvé
    Inscrit en
    Avril 2008
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 155
    Par défaut
    hello,

    question bête: pourquoi t'utilises pas la STL?
    dans les vectors tout existe déjà il me semble

  3. #3
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    Au boulot, un simple include de la STL pose des problemes de compilation très obscurs (code vieux, incompatibilité avec les MFC etc.).

    Dans mon projet, il existe déjà des conteneurs de type Map, Tableau, Set etc. que je suis tenu d'utiliser.

    Je peux toutefois utiliser les algos STL dans les cpp ce qui me simplifie pas mal.

    Donc ce que je fais, c'est des wrappers Conteneurs Perso -> Interface STL. avec les itérateurs qui vont bien.

  4. #4
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 292
    Par défaut
    Oui. Regarde comment font les autres.
    P.ex. en m'inspirant de la stdlib de GCC, j'avais pondu cela: http://hermitte.free.fr/Info/C++/lib...cular_list.hpp
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  5. #5
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    Merci Luc.

    La premiere chose que je remarque dans ton implémentation, c'est que tu n'as pas besoin de redéfinir de classe d'itérateur, puisque tu pars du principe que stl_holder possède une interface stl et, donc, propose déjà un type d'itérateur que tu peux te contenter de réutiliser.

    Cependant, c'est intéressant, je vois que tes itérateurs de début et de fin sont membres de la classe, que tu les mets à jour lors de modifications et que tu te contentes de les renvoyer dans begin() et end() -/+ const.

    Effectivement c'est la solution que je vais adopter.

    Certainement à plus tard pour de nouvelles (més)aventures.

  6. #6
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 292
    Par défaut
    Tout le boulot est dans iterator_base -- et dans le type qui en hérite.

    Après le champs value_ est un itérateur vers un autre conteneur à la STL, comme il aurait pu s'agir d'un indice ou d'un pointeur. Ca, c'est le détail d'implémentation.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

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

Discussions similaires

  1. [Implémentation] Classe association
    Par Deallyra dans le forum Diagrammes de Classes
    Réponses: 6
    Dernier message: 21/03/2009, 14h05
  2. Classe dérivée et conteneur
    Par Esiee-Tooms dans le forum SL & STL
    Réponses: 6
    Dernier message: 06/02/2008, 18h18
  3. Comment implémenter classe TimeOut?
    Par chris_wafer dans le forum C++
    Réponses: 7
    Dernier message: 04/11/2007, 11h06
  4. sizeof(classe abstraite) = 4 = petits soucis :(
    Par Sébastien P dans le forum C++
    Réponses: 24
    Dernier message: 01/03/2007, 09h17
  5. class template : quelques petits soucis
    Par ToxiZz dans le forum Langage
    Réponses: 1
    Dernier message: 09/02/2006, 23h08

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