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 :

Accéder à l'élément d'un vector


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
    Juin 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 27
    Par défaut Accéder à l'élément d'un vector
    bonjour,
    j'aimerais savoir comment faire pour accéder a un objet créer dynamiquement. Je m'explique, je voudrais pouvoir créer X nombre d'objet choisie pas l'utilisateur et ensuite pouvoir accéder a l'un d'eux précisément. Pour le moment, je suis capable de créer un ou des objets statique que j'ai prédéterminer le nom. Selon ma logique qui est surement pas bonne, pour trouver un objet je doit connaitre son nom. Donc si je veux créer plusieurs objet dynamiquement il me faut pouvoir leur donner un nom à chacun et c'est la que je bloque. Si quelqu'un peux m'orienter sur le bon chemin et/ou si ma logique est pas bonne m'expliquer ou j'ai fais une erreur sa serais bien apprécié.

    merci

  2. #2
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    Par défaut
    Salut!

    Tu ne peux pas les stocker dans un std::vector puis y accéder via leur index?
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  3. #3
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    utilise une map.

    Une map sert précisément à associer des valeurs à des clés (une clé désignant une valeur).
    Si tu as un identifiant unique prédéterminé, la map est adaptée.
    Si tes objets sont polymorphiques, il faudra une map de pointeurs (ou peut-être une pointer_map tirée de boost)

    Si ton problème c'est de nommer les objets, alors il faut que tu réfléchisses au problème.
    Un programme n'est que l'exposé d'une méthode pour que l'ordinateur l'applique aveuglément sur des données. C'est au programmeur de réfléchir.
    Une solution, par exemple, est d'avoir des noms qui sont en fait des numéros.
    Le premier objet créé reçoit le nom 0, le suivant 1, puis le suivant encore recevra 2, etc.
    En faisant ainsi, une std::deque sera satisfaisante.

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 27
    Par défaut
    Je sais pas si, j'ai bien compris ce que tu voulais me proposer dragonjoker59. Je pense que je suis sur le bon chemin de ta proposition du vector, mais je n'arrive pas a récupérer l'objet et l'utiliser. voici le code que j'ai fait jusqu'à date.
    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
    #include <iostream>
    #include <string>
    #include <vector>
     
    using namespace std;
     
    class test
    {
        public:
            test();
            void afficher();
            int setValeur(int i);
        protected:
        private:
            int m_valeur;
    };
    test::test()
    {
        m_valeur;
    }
     
    int test::setValeur(int x)
    {
        m_valeur = x;
        return this->m_valeur;
    }
    void test::afficher()
    {
        cout << "objet test" << endl;
        cout << "valeur: " << m_valeur << endl;
    }
     
    int main()
    {
        int i =3;
        cout << "liste d'objet test" << endl;
        vector<test> v;
        for(int i=0; i<=5; i++)
        {
            test *objet;
            objet = new test;
            objet->setValeur(i);
            objet->afficher();
            v.push_back(*objet);
        }
        for(int i=0; i<=5; i++)
        {
            //objectif récupérer ce qui ce trouve dans le vector
            v.pop_back() ;
            //objectif utiliser l'objet récupérer
     
        }
     
        return 0;
    }
    Il me reste aussi a regarder la proposition de leternel. Comme je suis un étudient consciencieux, j'aime bien comprendre les différentes méthode proposé et voir ce quelle peuvent m'offrir.
    En passent, merci d'avoir pris du temps pour me répondre.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par mathieupicard Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            test *objet;
            objet = new test;
            objet->setValeur(i);
            objet->afficher();
            v.push_back(*objet);
    Là tu crées surtout une jolie fuite mémoire. Pourquoi faire une allocation dynamique si tu n'en as pas besoin ?
    Je ne vois nulle part le nom de l'objet alors que tu voudrais récupérer un objet d'après son nom, ça va être compliqué non ?
    pop_back n'a jamais été pour récupérer un objet, comme l'indique très bien sa doc c'est pour supprimer le dernier élément.
    La solution c'est une map std::map<std::string, Objet>, son opérateur[] et std::map::find.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 27
    Par défaut
    merci! pour la remarque sur la fuite de mémoire, je vais faire plus attention à sa. Je cherche a réalisé mon exercice qui est le suivant :Écrivez un programme qui utilise le mot clé THIS dans la gestion d’une liste chaînée de 20 objets de même nature. Mais, je cherche le chemin pour le réaliser moi même, maisje dis pas non pour me faire orienté sur le bon chemin . Je piétine un peut, car le côté objet est nouveau encore et j'ai de la difficulté à bien comprendre comment nommé un objet quand j'en créer plusieurs à la fois. À moins que mon manque de compréhension me face passer à côté de quelques chose.

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Ha je crois comprendre... Par nom d'un objet, tu veux dire le nom de la variable dans le code-source ?!?
    Le nom de la variable on s'en moque, ça disparait à la compilation. C'est la première réponse de dragonjoker qui est correcte : tu as un vector d'objets et y accèdes par index.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

Discussions similaires

  1. Création d'objets dynamiquement et accès à un serveur
    Par NoviceJava dans le forum Général Conception Web
    Réponses: 7
    Dernier message: 26/05/2007, 16h45
  2. [PowerBuilder] Création d'objets dynamiques
    Par Béné123456789 dans le forum Powerbuilder
    Réponses: 3
    Dernier message: 12/06/2006, 00h33
  3. [VB.NET] Création d'objet dynamique
    Par Torkan dans le forum Windows Forms
    Réponses: 9
    Dernier message: 29/05/2006, 03h18
  4. création d'objets dynamique
    Par cilies38 dans le forum Langage
    Réponses: 10
    Dernier message: 06/03/2006, 18h43
  5. [FLASH MX2004] Création d'objet dynamiquement
    Par noarno dans le forum Flash
    Réponses: 3
    Dernier message: 15/12/2004, 11h00

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