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

Langage C++ Discussion :

Récupérer valeurs d'un vector


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 91
    Par défaut Récupérer valeurs d'un vector
    Bonsoir à tous,

    J'ai actuellement un soucis avec les std::vector<>.

    Je m'explique, j'ai un vector de 5 pointeurs sur une de mes classes, j'arrive à utiliser les méthodes etc.. sans problèmes tant que je reste dans la fonction.

    Seul hic, j'aimerai récupérer le vector pour le passer en paramètre à une autre fonction pour un traitement différent.

    Sauriez-vous comment je peux faire pour récupérer les valeurs que je rentre dans mon vector<MaClass*> Truc dans la fonction pour rebalancer le vector rempli dans une autre fonction ?

    Merci d'avance.

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    Un peu de code pour illustrer ton problème ne serait pas de trop.
    La solution triviale est de passer le vecteur par référence.
    Mais en générale, je préfère passer des itérateurs : soit des itérateurs début/fin pour un parcours, soit un itérateur d'insertion (back_insert_iterator&co).

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 91
    Par défaut
    Bonjour,

    Oui bien sûr voilà :

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
     
    void count_espece(/* Comment récupérer le vecteur Race ? */)
    {
        int cat = 0, dog = 0, rabbit = 0;
        string e;
        int i;
        for(i = 0; i < 5; i++)
        {
            e = Race[i]->getEspece();
            if(e == "chien")
            {
                dog++;
            }
            else if(e == "chat")
            {
                cat++;
            }
            else if(e == "lapin")
            {
                rabbit++;
            }
        }
     
        cout << "Il y a " << dog << " chiens, " << cat << " chats et " << rabbit << " lapins." << endl;
    }
     
    void aff_carac(/* Comment récupérer le vecteur Race ? */)
    {
        int i;
        for(i = 0; i < 5; i++)
        {
            Race[i]->affichage();
        }
    }
     
    void delete_ccm(/* Comment récupérer le vecteur Race ? */)
    {
        int i;
        string e;
        string s;
     
        for(i = 0; i < 5; i++)
        {
            e = Race[i]->getEspece();
            s = Race[i]->getSexe();
     
            if(e == "chien" || e == "chat")
            {
                if(s == "M")
                {
                    Race[i]->saisie(" ", 0, " ", " ");
                }
            }
        }
    }
     
    int main()
    {
        /*
        vector<Animal*> Race(5);
        insert_animal(......);        // Comment envoyer le vecteur Race ?
        Race[2]->affichage();       // Vérification si Race est bien récupéré chargé
        age_moyen(....);*/          // Comment envoyer le vecteur Race ?
    }

    Merci !

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Par défaut
    3DArchi t'as donné les différentes possibilités.

    Si tu débutes, le plus simple est que tu utilises des références :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    void foo(const vector<Animal*>& Race) //Si tu as juste besoin du vecteur en lecture
    void goo(vector<Animal*>& Race) //Si tu as aussi besoin du vecteur en ecriture
    Ensuite tu pourras améliorer en prenant un range en entrée à la place d'une référence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    template<class Iterator>
    void foo(Iterator begin, Iterator end)
    Et si tu veux inserer des éléments dans le conteneur (et pas juste les lire et les modifier), tu peus utiliser un insert_iterator.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 91
    Par défaut
    Merci beaucoup pour l'aide.

    Toutefois pour l'envoyer à la fonction, j'envoie le vecteur normalement ?

    A savoir par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    goo(Race); // Envoi du vecteur à la fonction goo */
     
    /*pour le récupérer en : */
     
    void goo(vector<Animal*> &Race);
    Toutefois quand j'envoie le paramètre de cette façon pas de soucis pour le récupérer par la fonction goo.

    Mais comme préciser dans mon premier post, ce que j'aimerai c'est que je puisse appeler une méthode ensuite, et que cela fonctionne, de ce genre :
    C'est bien ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    void goo(vector<Animal*> &Race) 
    {
      // Remplissage des 5 cases du vecteur
    }
    
    
    main()
    {
      goo(Race); // Envoi du vecteur à la fonction goo */
      Race[2]->methode;  /* Là je me retrouve avec un Segmentation fault
                                       alors que j'aimerai qu'il exécute la méthode methode de l'objet de la case 3 */
    }
    Merci !

  6. #6
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Par défaut
    Fait voir comment tu remplis ton vecteur, tu es bien certain que les objets sur lesquels pointes les éléments du vecteur existent toujours ?

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 03/05/2007, 00h20
  2. Récupérer valeur contrôle en dynamique via requête
    Par nicburger dans le forum Access
    Réponses: 10
    Dernier message: 15/09/2005, 15h41
  3. [ActionScript] Récupérer valeur balise <param />
    Par JohnBlatt dans le forum Flash
    Réponses: 1
    Dernier message: 18/07/2005, 14h50
  4. CR9 - Récupérer valeurs multiples d'un champ paramètre
    Par CR9-Deb dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 06/07/2005, 16h08
  5. récupérer valeur d'un ID après insertion
    Par rikidi dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 26/08/2003, 22h21

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