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

SL & STL C++ Discussion :

comment afficher l'élément de la classe dans un vector de cette classe


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de razily
    Inscrit en
    Février 2009
    Messages
    376
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 376
    Par défaut comment afficher l'élément de la classe dans un vector de cette classe
    Bonjour à tous ;
    peut être ma question est aussi banale mais çà me bloque , car j'arrive pas afficher l'élément d'une calsse dans un vector de cette classe :
    voici le code concerné :

    rappel classe Case :
    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
     
     
    class Case {
     
    	 private:
        int ligne ;
        int colonne ;
        // etiquette on pourra le mettre dans piece
        char etiquette;
     
     
    public:
     
        Case();
        Case(int col , int lin, char etiq);
     
    };
     
    Case::Case(int col , int lin,char etiq):colonne(col),ligne(lin),etiquette(etiq)
     {}
    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    std::vector<Case*> SS;  // ici je crée un vector de la classe Case 
    
    Plateau::Plateau(){
    Case* P1 = new Case(0,0,' '); // création de chaque case 
    	Case* P2 = new Case(0,1,'a');
    	Case* P3 = new Case(0,1,'b');
    	Case* P4 = new Case(0,3,'c');
    	Case* P5 = new Case(0,4,'d');
    	Case* P6 = new Case(0,5,'e');
    	Case* P7= new Case(0,6,'f');
    	Case* P8 = new Case(0,7,'g');
    	Case* P9 = new Case(0,8,'h');
    	Case* P10 = new Case(0,9,' ');
    	SS.push_back(P1); // insertion dans le vector 
    	SS.push_back(P2);
    	SS.push_back(P3);
    	SS.push_back(P4);
    	SS.push_back(P5);
    	SS.push_back(P6);
    	SS.push_back(P7);
    	SS.push_back(P8);
    	SS.push_back(P9);
    	SS.push_back(P10);
    
    }
    
    // je surcharge pour pouvoir afficher l'element par le biais de l'itérator 
    ostream &operator<<(ostream& out , Case*P1){
    
        out << P1->GetEtiquetteCase();
        return out ;
    
    	}
    
    et c'est dans cette méthode qui suit qui me pose problème :
    d'abord en passant par l'itérator il ne m'affiche rien 
    
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1234567
     
    std::vector<Case*>::iterator ii;
     
    	for(ii=SS.begin();ii!=SS.begin();ii++){
     
    		cout << *ii <<"  " ;
    	}
    ensuite si je met par exemple comme de simple vecteur en mettant çà
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    12
     
    std::cout << SS[0][4] <<"  ";
    il m'affiche un petit carré insensé je voulais afficher comme çà ' ' a b c d e f g h ' ' ( cordonnées ) ' ' -> espace 1 t c f d r f c t 1 (1ère ligne avec la case des pièces ) avant quand j'ai fait SS vector de char et que qd j'ai écrit çà !! çà marche et ce genre d'affichage que je voulais faire mais avec un vector de classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    12345678
     
    ////        for( i= 0;i<10;i++){
    ////        for( j =0;j<10;j++){
    ////                            std::cout << SS[i][j] <<"  ";
    ////                    }
    ////         cout << endl ;
    ////
    ////        }
    juste aussi un question sur l'utilisation du vector :
    est ce que l'ordre des SS.push_back(P1); // insertion dans le vector
    compte dans l'insertion des vectors si c'est oui , est ce qu'il le fait comme le traitement des vecteurs en C i-e
    (0,0)(0,1)(0,2)(0,3)
    (1,0)....

    En fait quand j'ai changé le code et en mettant çà il m'affiche bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    std::vector<Case*>::const_iterator ii;
     
    		for(ii = SS.begin();ii!=SS.end();ii++){
     
    	cout << *ii<< " " ;
     
    		}

    mais comment faire pour sauter à la ligne et afficher le reste si on ajoute le vector

    merci d'avance!!

  2. #2
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Oulà.
    Il y a quelques indices dans ton code qui montrent que c'est pas encore la grande maitrise, hein ?


    Ce code écrit rapidement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    std::vector<int> v;
    v.push_back(2);
    v.push_back(8);
     
    for (int i = 0; i != v.size(); i++)
    {
        std::cout << vect[i] << std::endl;
    }
    est un début de piste pour toi....

  3. #3
    Membre éclairé Avatar de razily
    Inscrit en
    Février 2009
    Messages
    376
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 376
    Par défaut
    Citation Envoyé par poukill Voir le message
    Oulà.
    Il y a quelques indices dans ton code qui montrent que c'est pas encore la grande maitrise, hein ?


    Ce code écrit rapidement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    std::vector<int> v;
    v.push_back(2);
    v.push_back(8);
     
    for (int i = 0; i != v.size(); i++)
    {
        std::cout << vect[i] << std::endl;
    }
    est un début de piste pour toi....
    oui mais même ce code ; comment sauter à la ligne à partir d'une position précise ??

  4. #4
    Membre éclairé Avatar de razily
    Inscrit en
    Février 2009
    Messages
    376
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 376
    Par défaut
    Astuce du Débutant

    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
     
        int i = 0;
        std::vector<Case*>::const_iterator ii;
     
        for(ii = SS.begin();ii!=SS.end();ii++){
            if(i<10){
     
                cout << *ii<< " " ;
                i++;
     
            }
            else{
                cout << endl ;
                cout << *ii<< " " ;
                i=0;
            }
     
        }
    affichage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
      a b c d e f g h   
    8 t c f d r f c t 8
    mais la suite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    8 t c f d r f c t 8 7 
    p p p p p p p p 7 6 _ 
    _ _ _ _ _ _ _ 6

  5. #5
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Il y aurait, à vrai dire, encore plus facile qu'un test if... else pour y arriver:

    Nous pourrions en effet profiter des qualités d'un modulo pour décider quand aller à la ligne (et cela nous éviterait d'ailleurs d'avoir à gérer un compteur "interne" ), bon, nous utiliserions l'index, mais, tant qu'à faire...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        for(size_t i=0;i<SS.size();++i){
            cout << *(SS[i])<< " " ;
            if(i%10==0 && i>0) // && i>0 permet d'éviter un saut à la ligne inutile
                               // après l'affichage du premier élément :-D
                cout<<endl;
        }
    Je suis, généralement, partisan du fait d'utiliser des (const_)itérateurs chaque fois que faire se peut, mais, si d'aventure, l'utilisation d'un index "classique" me permet de me simplifier la vie, pourquoi s'en passer
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  6. #6
    Membre éclairé Avatar de razily
    Inscrit en
    Février 2009
    Messages
    376
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 376
    Par défaut
    merci beaucoup

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 24/09/2009, 18h49
  2. [MySQL] Comment afficher des éléments dans une liste déroulante tout en dissimulant un ?
    Par lou87 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 23/04/2009, 16h45
  3. Réponses: 23
    Dernier message: 07/02/2006, 17h55
  4. Réponses: 2
    Dernier message: 27/12/2005, 20h09
  5. Comment afficher des éléments de même nom en 1 seule fois
    Par magic8392 dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 27/09/2005, 11h24

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