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 insérer une classe dans un vector


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 insérer une classe dans un vector
    Bonjour à tous ,
    j'aimerai bien comprendre l'utlisation du vector dans la librairie STL et notamment sur la manière d'insérer une classe particulière au lieu d'un simple type (int -char ) voici 2 codes ,l'une se base sur une int (çà marche) et l'autre ce que je voulais faire avec une simple classe et il ya un problème

    ici déclaration d'un matrice à 2 dimensions mais de simple type entier et çà marche
    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
     
    #include <iostream>
    #include <vector>
     
    using namespace std;
     
    main()
    {
       // Declare size of two dimensional array and initialize.
       vector< vector<int> > vI2Matrix(3, vector<int>(2,0));    
     
       vI2Matrix[0][0] = 0;
       vI2Matrix[0][1] = 1;
       vI2Matrix[1][0] = 10;
       vI2Matrix[1][1] = 11;
       vI2Matrix[2][0] = 20;
       vI2Matrix[2][1] = 21;
     
       cout << "Loop by index:" << endl;
     
       int ii, jj;
       for(ii=0; ii < 3; ii++)
       {
          for(jj=0; jj < 2; jj++)
          {
             cout << vI2Matrix[ii][jj] << endl;
          }
       }
    }
    mais ici je voudrai faire la même chose sauf qu'à la place des valeurs entiers , je voudrai mettre un élement d'une classe qui est de même type également (entier) mais ce qui est essentiel c'est la manière d'insérer l'objet et qu'on pourra utiliser push_back et push_front

    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
     
    #include <iostream>
    #include <vector>
     
    using namespace std;
     
    class Cordonnee{
    	private :
    	int element;
    	public:
    	Cordonnee();
    	Cordonnee(int x);
    	~Cordonnee();
    	int getelement(){return element;}
     
    	};
     
    	Cordonnee::Cordonnee(int x){
    		element = x ;
     
    		}
        Cordonnee::Cordonnee(){
    		element = 0 ;
     
    		}
     
    	   Cordonnee::~Cordonnee(){}
     
    int main()
    {
     
     
       // Declare size of two dimensional array and initialize.
       vector< vector<Cordonnee*> > vI2Matrix(3, vector<Cordonnee>(2,0));  
     
         Cordonnee P1 ,P2(100);
     
       vI2Matrix[0][0] = P1.getelement();
       vI2Matrix[0][1] = P2.getelement();
       vI2Matrix[1][0] = P1.getelement();
       vI2Matrix[1][1] = P2.getelement();
      // vI2Matrix[2][0] = 20;
       vI2Matrix[2][1] = P1.getelement();
     
       cout << "Loop by index:" << endl;
     
       int ii, jj;
       for(ii=0; ii < 3; ii++)
       {
          for(jj=0; jj < 2; jj++)
          {
             cout << vI2Matrix[ii][jj] << endl;
          }
       }
       return 0;
    }
    j'ai un message d'erreur de ce genre :
    essaiVector.cpp:53: erreur: no matching function for call to «std::vector<std::vector<Cordonnee*, std::allocator<Cordonnee*> >, std::allocator<std::vector<Cordonnee*, std::allocator<Cordonnee*> > > >::vector(int, std::vector<Cordonnee, std::allocator<Cordonnee> >)»

    essaiVector.cpp:57: erreur: invalid conversion from «int» to «Cordonnee*»
    en fait , est ce qu'on a le droit de mettre quelque chose de ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // Declare size of two dimensional array and initialize.
       vector< vector<Cordonnee> > vI2Matrix(3, vector<Cordonnee>(2,0));  
     
    et comme çà on pourra faire par exemple ;
    Cordonnee P1;
     
    vI2Matrix.push_back(P1);
    merci d'avance pour vos réponses

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vector< vector<Cordonnee*> > vI2Matrix(3, vector<Cordonnee>(2,0));
    L'étoile est en trop, il n'y a aucune raison d'utiliser des pointeurs ici.

  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
    oui et même si je l'enlève en faisant çà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     vector< vector<Cordonnee> > vI2Matrix(3, vector<Cordonnee>(2,0));
    j'ai toujours cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    /usr/include/c++/4.2/bits/ostream.tcc:120: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_streambuf<_CharT, _Traits>*) [with _CharT = char, _Traits = std::char_traits<char>]
    je crois que cette ligne ; il indique une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     cout << vI2Matrix[ii][jj] << endl;

  4. #4
    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,
    Citation Envoyé par razily Voir le message
    je crois que cette ligne ; il indique une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     cout << vI2Matrix[ii][jj] << endl;
    vI2Matrix[ii][jj] retourne un objet du type Cordonnee. Il te faut donc spécialiser la sortie de << : F.A.Q. Comment utiliser les flux pour afficher ou saisir mes objets ?

  5. #5
    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
    oui , vous avez parafaitement raison , il suffit que je surcharge l'opérateur << comme suit et çà marche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    ostream &operator<<(ostream &out ,Cordonnee &P1){
     
    	cout << P1.getelement();
     
    	}
    mais comment je vais faire si je veux écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     vI2Matrix.push_back(P2);

  6. #6
    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
    Citation Envoyé par razily Voir le message
    mais comment je vais faire si je veux écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     vI2Matrix.push_back(P2);
    Tu as déclaré vI2Matrix comme un vecteur de vecteur. Donc, si tu veux rajouter un point, tu dois savoir dans quelle ligne d'abord :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vI2Matrix[0].push_back(P2);
    Ou rajouter un vecteur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vI2Matrix.push_back(std::vector<Coordonnees>());

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 08/02/2006, 19h42
  2. Comment insérer une form dans une autre form ?
    Par marsupilami34 dans le forum Composants VCL
    Réponses: 4
    Dernier message: 19/07/2005, 11h15
  3. Comment insérer une image dans un graphique?
    Par Leclair2000 dans le forum Composants VCL
    Réponses: 3
    Dernier message: 23/05/2005, 09h29
  4. Comment insérer une image dans une cellule d'un TDrawGrid ?
    Par kanux dans le forum Composants VCL
    Réponses: 4
    Dernier message: 15/01/2005, 18h58
  5. [Crystal Reports 9] comment insérer une image dans Détails
    Par VVE dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 22/10/2003, 17h06

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