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 :

Valeur par défaut pour un iterateur


Sujet :

C++

  1. #1
    Membre éprouvé

    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2004
    Messages : 58
    Par défaut Valeur par défaut pour un iterateur
    Bonjour à tous,
    Comment puis-je tester si un itérateur a été initialisé ou s'il a juste été créé avec le constructeur par défaut ? J'imagine qu'il existe une méthode, mais je n'arrive pas à la trouver...
    En gros, j'ai un code du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    std::vector<T*> * ptr_vect = .... ;
    std::vector<T*>::const_iterator it;
    if (ptr_vect)
      it = ptr_vect->begin();
    et je voudrais par la suite être capable de savoir si it pointe effectivement sur quelquechose (c'est-à-dire si on est passé dans le if).
    Une idée ?
    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
    A mon avis tu ne peux pas te fier à la valeur par défaut d'un itérateur. Pourquoi ne pas l'initialiser à une valeur invalide, comme par exemple ptr_vect->end() ? Sinon au pire, tu peux toujours lui adjoindre un booléen pour indiquer s'il a été initialisé ou non.


    Pourquoi un pointeur sur vecteur ?

  3. #3
    Membre éprouvé

    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2004
    Messages : 58
    Par défaut
    Merci pour ta réponse.
    Citation Envoyé par Loulou24
    A mon avis tu ne peux pas te fier à la valeur par défaut d'un itérateur.
    dommage qu'il n'y ait pas un genre de "NULL" pour les iterateur
    Citation Envoyé par Loulou24
    Pourquoi ne pas l'initialiser à une valeur invalide, comme par exemple ptr_vect->end() ?
    malheureusement, j'aimerai justement y mettre qqch quand je n'ai pas de ptr_vect...
    Citation Envoyé par Loulou24
    Sinon au pire, tu peux toujours lui adjoindre un booléen pour indiquer s'il a été initialisé ou non.
    Bon, ben c'est ce je vais faire alors...
    Citation Envoyé par Loulou24
    Pourquoi un pointeur sur vecteur ?
    Parce qu'il doit pouvoir être parfois NULL...

    Merci encore.

  4. #4
    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 pas te servir justement de ptr_vect (tester si != NULL) pour savoir si ton itérateur est initialisé ?

  5. #5
    Membre éprouvé

    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2004
    Messages : 58
    Par défaut
    Citation Envoyé par Loulou24
    Tu ne peux pas te servir justement de ptr_vect (tester si != NULL) pour savoir si ton itérateur est initialisé ?
    Oui... je vais faire quelque chose comme ça... mais initialement, je voulais faire le test d'un endroit où je n'avais pas accès à cette info.
    Merci.

  6. #6
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    la solution du booleen me semble la plus adapte
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  7. #7
    Membre chevronné Avatar de niglo
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 379
    Par défaut
    Citation Envoyé par le y@m's
    la solution du booleen me semble la plus adapte
    Je pense également que le booléen est plus propre et plus clair.

  8. #8
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    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 296
    Par défaut
    Ton truc me parait compliqué -- deux états distincts qu'il faut détecter à au moins deux endroits différents. A se demander si cela ne mériterait pas une refactorisation.

    Avoir un pointeur pour un vecteur qui pourrait être null est une pessimisation. Ce que tu économises pour les quelques fois où il sera vide, tu le payes au centuple pour toutes les fois où il ne le sera pas. Un vecteur, c'est déjà un pointeur, sauf qu'il est enveloppé.

    Et puis un itérateur se balade avec son "end". Etre égal à l'itérateur de fin de plage signifie être invalide. =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    typedef std::vector<XX>::iterator MyIterator;
    MyIterator it;
    f_all (it, it);
     
    void f_all(MyIterator start, MyIterator end) {
        for ( ; start != end ; ++start) f(start) ;
    }
    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...

  9. #9
    Membre éprouvé

    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2004
    Messages : 58
    Par défaut
    Bonjour,

    Ta solution de tester l'iterateur de cette façon me semble une bonne idée,
    mais j'ai effectivement réorganisé pour réussir à m'en passer.
    Ça me parait quand même dommage de ne pas avoir un genre de NULL pour un itérateur...

    Pour ce qui est du pointeur sur un vecteur, il s'agit d'un vecteur appartenant à un autre objet... je ne vais quand même pas le recopier !

    Merci de ta réponse,
    Anne.

  10. #10
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    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 296
    Par défaut
    Tu n'es pas obligée de copier ton vecteur.
    Tu peux le référencer ... avec une référence. Mais là, il faut voir l'algo pour le comment on peut refactorer l'ensemble, et si on peut le faire.

    Difficile de parler dans le vague maintenant. 8)
    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...

  11. #11
    Membre éprouvé

    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2004
    Messages : 58
    Par défaut
    Citation Envoyé par Luc Hermitte
    Mais là, il faut voir l'algo pour le comment on peut refactorer l'ensemble, et si on peut le faire.
    Difficile de parler dans le vague maintenant. 8)
    Je n'ai malheureusement plus le temps de travailler sur ce problème maintenant :-(
    mais je détaillerai peut-être l'algo quand je m'y remettrai pour te demander conseil
    Merci.

Discussions similaires

  1. [JSF] valeur par défaut pour InputText
    Par gondek dans le forum JSF
    Réponses: 3
    Dernier message: 11/07/2010, 19h08
  2. [CR 8.5] Valeur par défaut pour un champ
    Par Neo41 dans le forum SAP Crystal Reports
    Réponses: 9
    Dernier message: 18/01/2007, 16h20
  3. probleme de valeur par défaut pour dsum
    Par galaad666 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 11/10/2006, 15h58
  4. valeur par défaut pour un parametre de fonction
    Par maximenet dans le forum Langage
    Réponses: 2
    Dernier message: 19/07/2006, 10h29
  5. Réponses: 2
    Dernier message: 18/10/2003, 14h42

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