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 :

Acces éléments tableau dynamique


Sujet :

C++

  1. #1
    Membre confirmé
    Homme Profil pro
    Deficient visuel
    Inscrit en
    Mai 2019
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Deficient visuel

    Informations forums :
    Inscription : Mai 2019
    Messages : 216
    Par défaut Acces éléments tableau dynamique
    Bonjour a toutes et a tous ,
    Dabord le petit bout de code puis ensuite ma question .

    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
    #ifndef JEUX_H_
    #define JEUX_H_
    #include <iostream>
    #include <vector>
    #include <string>
     
    class Information
    {
      public:
      Information();
      ~Information();
      static void saisie(std::vector<std::string>&tab,size_t taille);
      static void affiche(std::vector<std::string>&tab,size_t taille);
    };
     
    #endif /* JEUX_H_ */
    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
    Information::Information(){}
    Information::~Information(){}
     
    void Information::saisie(vector<string> &tab,size_t taille)
    {
    	tab.clear();
    	 for(size_t i(0);i<taille;++i){
         cout << "Entrez le nom du " << i+1 <<" joueur" << endl;
         string name;
         cin >> name;
         tab.push_back(name);
     
     
    	}
    }
    void Information::affiche(vector<string> &tab,size_t taille)
    {
    	for(size_t i(0);i< taille;++i){
    		cout << "Le joueur " << i+1 << " est " << tab[i]<< endl;
    	}
    }
    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
    #include "jeux.h"
    #include <iostream>
    #include <vector>
    using namespace std;
     
    int main()
    {
    	Information equipe1 ,equipe2;
     
     
    	char a;
    	 cout << "Voulez vous faire une partie ?" << endl;
    	 cout << "Tapez o (oui) ou n (non)"<< endl;
    	 cin >> a;
     
    	 if(a == 'o')
    	 {
    	   vector<string>tab;
    	   size_t nb(0);
    	   cout << "Quel est le nombre de personne dans votre equipe ?" << endl;
    	   cin >> nb;
     
    	   cout <<"1ere equipe : " << endl;
    	   equipe1.saisie(tab,nb);
    	   cout << "2eme equipe : " << endl;
    	   equipe2.saisie(tab,nb);
    	   cout << "1ere equipe" << endl;
    	   equipe1.affiche(tab,nb);
    	   cout <<"2eme equipe" << endl;
    	   equipe2.affiche(tab,nb);
         }else { cout << "Aurevoir,a bientot" << endl;}
    Admettons que pour chaque instance " equipe1" et "equipe2 " , j'ai 3 personnes dans chacune d'entre elle .
    equipe1 :
    -toto
    -tata
    -titi
    equipe2:
    -riri
    -fifi
    -loulou
    Comment puis-je afficher " fifi" par exemple ?
    J'avais pensé a :
    Merci de votre aide

  2. #2
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 766
    Par défaut
    La classe std::vector surcharge l'opérateur [] (<- documentation cplusplus.com en anglais) : donc oui on peut faire tab|i].

    Tu as aussi la méthode at et les itérateurs (std::vector::front, std::vector::back, ...) (<- documentation cplusplus.com en anglais)

  3. #3
    Membre confirmé
    Homme Profil pro
    Deficient visuel
    Inscrit en
    Mai 2019
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Deficient visuel

    Informations forums :
    Inscription : Mai 2019
    Messages : 216
    Par défaut
    J'avais ecrit :
    equipe2.tab[1]
    Je me demandais si on pouvait acceder directement a un élément en l'occurence "fifi" de mon instance equipe2

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Bonjour,

    Le problème de ton instance equipe2, c'est qu'elle contient absolument rien du tout. Relis-là bien. Il n'y a aucun rapport entre tab et tes 2 instances equipe1 et equipe2, sauf qu'à un moment tu t'es servi de ces instances pour accéder à tab.

  5. #5
    Membre confirmé
    Homme Profil pro
    Deficient visuel
    Inscrit en
    Mai 2019
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Deficient visuel

    Informations forums :
    Inscription : Mai 2019
    Messages : 216
    Par défaut
    Je debute , donc pour le moment ce que je sais , c'est qu'il faut declarer mes objets dans le main et ensuite ca me permet d'utiliser les méthodes de ma classe .
    Concretement je vois pas trop ce que j'aurai du faire .
    Mais on est vendredi soir et vous vous appretez a sortir faire la fetes , je ne veux pas vous retenir

  6. #6
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 766
    Par défaut
    Citation Envoyé par chris7522 Voir le message
    Concretement je vois pas trop ce que j'aurai du faire .
    Cela ne te parle pas : attribut membre et plus loin encapsulation.
    Et donc toutes tes méthodes sont à refaire (parce que la liste en paramètre ne sert plus à rien), il faut réfléchir à recopier les listes saisies ou alors ajouter au fil de l'eau nom par nom, ..., l'affichage et la saisie peut être fait avec les opérateurs >> et << (en méthodes ou fonctions amies), ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class Information
    {
    /* ... */
     
    private:
     
        std::vector<std::string> list_names;
    };

  7. #7
    Membre confirmé
    Homme Profil pro
    Deficient visuel
    Inscrit en
    Mai 2019
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Deficient visuel

    Informations forums :
    Inscription : Mai 2019
    Messages : 216
    Par défaut
    Je te remercie une nouvelle fois de ton aide . Je ne comprends pas toujours tout le jargon , mais ca me fait avancer un peu a chaque fois .

  8. #8
    Membre éclairé Avatar de BioKore
    Homme Profil pro
    Dresseur d'Alpaga
    Inscrit en
    Septembre 2016
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Dresseur d'Alpaga

    Informations forums :
    Inscription : Septembre 2016
    Messages : 300
    Par défaut
    Salut,

    Dans le cas présenté, je ne vois pas en quoi la classe t'est utile. Néanmoins, comme j'imagine que tu vas y apporter, au fur et à mesure des fonctionnalités (ce que, en tant qu'amateur autodidacte, je déconseille !), et que tu réalises cette exercice dans le but d'apprendre, je reprendrais ton exemple en utilisant une classe :
    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
    class information {
    private:
    	std::vector<std::string> user_names;
     
    public:
    	information(size_t const count):
    		user_names(count);
    	{}
     
    	void saisie() {
    		for(auto &v:user_names) {
    			std::cout << "name : ";
    			std::cin >> v;
    			std::cin.ignore();
    			std::cout << '\n';
    		}
    	}
     
    	void affichage() {
    		for(auto &v:user_names) {
    			std::cout << v << '\n';
    		}
    	}
     
    };
     
     
    int main() {
     
    	size_t nb(0);
       cout << "Quel est le nombre de personne dans votre equipe ?" << endl;
       cin >> nb;
     
       information equ1(nb);
       information equ2(nb);
     
       equ1.saisie();
       equ2.saisie();
       //...
       equ1.affichage();
       equ2.affichage();
     
       return 0;
    }
    Globalement, lorsque l'on utilise une classe, il est important de savoir pourquoi on l'utilise et ce que ça apporte. Dans ton cas, Absolument rien !
    Si tu utilise des fonctions permettant de stocker des noms dans un conteneur (et de les lire), alors tu as plusieurs solutions (liste non exhaustive) :
    1) Tu utilises le conteneur en direct et les fonctions associées (std::vector<T> est déjà une classe qui permet d'insérer et récupérer des données)
    2) Tu encapsule le conteneur en privée dans une classe car il existe des fonctions bien particulières venant traiter tes données et tu ne veux pas que l'utilisateur risque de venir tout trifouiller sans faire attention
    3) Comme moi, tu préfère la programmation procédurale dès que possible, souvent bien plus simple à mettre en place et plus souple à l'utilisation, ce qui donnerait un code du genre :

    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
    void saisie(std::vector<std::string> & src) {
    	for(auto &v:src) {
    		std::cout << "name : ";
    		std::cin >> v;
    		std::cin.ignore();
    		std::cout << '\n';
    	}
    }
     
    void affichage(std::vector<std::string> const & src) {
    	for(auto &v:src) {
    		std::cout << v << '\n';
    	}
    }
     
    int main {
     
    	size_t nb(0);
    	cout << "Quel est le nombre de personne dans votre equipe ?" << endl;
    	cin >> nb;
     
    	std::vector<std::string> equ1{nb};
    	std::vector<std::string> equ2{nb};
     
    	saisie(equ1);
    	saisie(equ2);
    	affichage(equ1);
    	affichage(equ2);
     
    	return 0;
    }
    bien plus simple et souple à mon goût.
    Certes, il y aura autant d'idées que de programmeurs pour le même exercice, mais c'est toujours bien de comprendre pourquoi on utilise un certain type de code plutôt qu'un autre...

    Espérant avoir un peu aidé...

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/03/2015, 18h31
  2. Suppression élément d'un tableau dynamique
    Par gigacool1994 dans le forum C++
    Réponses: 7
    Dernier message: 08/01/2013, 23h52
  3. Réponses: 1
    Dernier message: 15/01/2011, 05h51
  4. Réponses: 2
    Dernier message: 03/11/2007, 11h24
  5. problème d'accès a des éléments créés dynamiquement
    Par Pymm dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 21/07/2005, 17h13

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