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 :

Tableau contenant des Vecteurs Template ?


Sujet :

Langage C++

  1. #1
    Membre régulier
    Étudiant
    Inscrit en
    Janvier 2004
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2004
    Messages : 279
    Points : 106
    Points
    106
    Par défaut Tableau contenant des Vecteurs Template ?
    Bonjour,

    Je suis embêté, face à un problème dont je n'arrive pas à trouver de solution :

    J'ai une classe TEMPLATE qui est en fait un Vecteur Template Dynamique.
    J'aimerais pouvoir instancier ce vecteur plusieurs fois, et les placer dans un tableau.

    Exemple :

    CVecteur<CNike> vec1;
    CVecteur<CPuma> vec2;
    CVecteur<CAdidas> vec3;
    ...

    Et avoir un tableau alors, récapitulatif regroupant ces derniers vecteurs dans chacune de ses cases :

    TableauVecteur[0] = vec1;
    TableauVecteur[1] = vec2;
    TableauVecteur[2] = vec3;
    ...

    Seulement, je n'arrive pas à trouver le moyen de faire de cette manière.

    Voici ma classe Template :

    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
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    #ifndef __CVECTEUR_H__
    #define __CVECTEUR_H__
     
    #include <iostream.h>
    //#include <sstream>
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include <ctype.h>
     
    #pragma once
     
    template <class XTYPE>
    struct noeud
    {
    	XTYPE valeur;
    	int position; 
    	noeud<XTYPE> *pSuiv;
    	noeud(XTYPE n, noeud<XTYPE> *s):valeur(n),pSuiv(s) {};
    };
     
     
    template <class XTYPE> class CVecteurIter;
     
    template <class XTYPE> 
    class CVecteur
    {
    	private:
    		noeud<XTYPE> *v_pVec;
     
    	public:
    		CVecteur():v_pVec(0) {};
     
    		~CVecteur(void)
    		{
     
    			noeud<XTYPE> *pCur, *pPrec;
    			pCur = v_pVec;
    			while(pCur != NULL)
    			{
    				pPrec = pCur;
    				pCur = pCur->pSuiv;
    				delete pPrec;
    			}
    		};
     
    		char empty(void) { return v_pVec ? 0:1; }
    		XTYPE head(void) { return v_pVec->valeur; }
     
    		virtual void insert(XTYPE &n) 
    		{
    			v_pVec = new noeud<XTYPE> (n,v_pVec);
    			//int test=0;
    		};
     
    		void display(void)
    		{			
    			CVecteurIter<XTYPE> it(*this);
     
    			cout<<"(";
    			while(!it.end())
    			{
    				XTYPE t( (XTYPE&)it );
    				//cout<<t<<", ";
    				cout<<it.getValue()<<", ";
    				it++;
    			}
     
    			cout<<"\x8\x8)"<<endl;
    		};
     
    		void removeAll(void)
    		{
    			noeud<XTYPE> *pCur, *pPrec;
    			pCur = v_pVec;
     
    			while(pCur != NULL)
    			{
    				pPrec = pCur;
    				pCur = pCur->pSuiv;
    				delete pPrec;
    			}
     
    			v_pVec = pCur;
    		}
     
    		friend class CVecteurIter<XTYPE>;
     
    };
     
    template<class XTYPE>
    class CVecteurIter
    {
    	private:
    		CVecteur<XTYPE>& v_vec;
    		noeud<XTYPE> *v_pCur;
     
    	public:
    		CVecteurIter(CVecteur<XTYPE>& v):v_vec(v),v_pCur(v.v_pVec) {};
    		int end() { return v_pCur == 0; }
    		void reset () { v_pCur = v_vec.v_pVec; }
     
    		char operator ++ ()
    		{
    			if(v_pCur)
    			{
    				v_pCur = v_pCur->pSuiv;
    				return 1;
    			}
    			else 
    				return 0;
    		}
     
    		char operator ++ (int) { return operator ++ (); }
    		operator XTYPE() const { return v_pCur->valeur; }
    		XTYPE& operator& (void) { return v_pCur->valeur; }
    		XTYPE getValue() { return v_pCur->valeur; }
     
    };
     
     
    #endif
    Et voila la classe que j'ai tenté de faire, pour arriver à en faire un Tableau contenant sur chacune de ses cases, un des vecteurs :

    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
    #include "CArmoire.h"
    #include "CVecteurTemplate.h"
    #include "CAuto.h"
     
    CArmoire::CArmoire()
    {
    	int nb = 1;
    	CVecteur<CAuto> vec1;
    }
     
    CArmoire::CArmoire(int etageres)
    {
    	arm_etageres = etageres;
    	cout<<endl<<arm_etageres<<" créées."<<endl;
    }
     
    CArmoire::~CArmoire()
    {
     
    }
     
     
    void CArmoire::ajouterElem(int etage, CVecteur<CAuto>& listeAuto)
    {
    	this[etage] = listeAuto;
    }
     
    void CArmoire::ouvrirArmoire()
    {
    	for(int i=0;i<arm_etageres;i++)
    	{
    		cout<<endl<<"Etagères numéro : "<<i+1<<endl;
    		this[i].display();
    	}
    }

  2. #2
    Membre confirmé Avatar de goodpz
    Profil pro
    Inscrit en
    Février 2007
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 475
    Points : 514
    Points
    514
    Par défaut
    Le problème c'est qu'un CVecteur<T1> n'est pas un CVecteur<T2>

    Une solution ça serait de faire dériver les CVecteur<T> d'une base classe commune et tu les manipulerais de manière polymorphique

  3. #3
    Membre régulier
    Étudiant
    Inscrit en
    Janvier 2004
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2004
    Messages : 279
    Points : 106
    Points
    106
    Par défaut
    Je ne comprends pas bien ce que tu veux dire par là ...

    Enfin, c'est peut etre que je reste borné sur mon idée de base qui est d'inclure "bêtement" des vecteurs dans un tableau.

    Je ne suis toujours pas arrivé à trouver la solution à mon problème.


    Edit :

    A savoir que je ne veux pas inclure de Vecteur<t1> et de Vecteur<t2> dans mon tableau ... Ce sont UNIQUEMENT des Vecteur<t1> que je veux inclure ...

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

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Citation Envoyé par ExSter
    Je ne comprends pas bien ce que tu veux dire par là ...

    Enfin, c'est peut etre que je reste borné sur mon idée de base qui est d'inclure "bêtement" des vecteurs dans un tableau.

    Je ne suis toujours pas arrivé à trouver la solution à mon problème.


    Edit :

    A savoir que je ne veux pas inclure de Vecteur<t1> et de Vecteur<t2> dans mon tableau ... Ce sont UNIQUEMENT des Vecteur<t1> que je veux inclure ...
    Pourquoi ne pas stocker tes vecteurs dans un vecteur par exemple?
    Celà ne pose pas du tout problème, et ça évite les tableau:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::vector<std::vector<double> >

  5. #5
    Membre régulier
    Étudiant
    Inscrit en
    Janvier 2004
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2004
    Messages : 279
    Points : 106
    Points
    106
    Par défaut
    Le soucis, c'est que je suis restreint à ne pas utiliser les vecteurs génériques. (Vector).

    Donc, dans mon cas, je devrais faire de cette manière ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CVecteur<CVecteur<CAuto>>& TableauAuto
    Est-ce bien juste ?

Discussions similaires

  1. [iText] Tableau contenant des tableaux
    Par drizztoli dans le forum Documents
    Réponses: 2
    Dernier message: 01/09/2010, 21h51
  2. tableau contenant des valeur "supprimé"
    Par rouxfab dans le forum Runtime
    Réponses: 6
    Dernier message: 15/07/2008, 09h05
  3. Réponses: 7
    Dernier message: 10/06/2008, 15h38
  4. Tri d'un tableau contenant des heures;
    Par Bourak dans le forum Delphi
    Réponses: 3
    Dernier message: 27/07/2006, 12h57
  5. Réponses: 18
    Dernier message: 28/04/2006, 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