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 :

tableau a 2 dimention ?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2006
    Messages : 412
    Par défaut tableau a 2 dimention ?
    Bonjours

    Tout est dans le titre ou presque:
    j'ai d'abors chercher sur le web, et dans la faq
    http://cpp.developpez.com/faq/cpp/in...STL#STL_vector

    Mai pas d'exemple complet sur l'utilisation d'un tableau contenant d'autre tableau de type vector

    j'ai essayer un exemple simple mai bon :S
    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
     
    #include <iostream>
    #include <vector>
    int main()
    	{
    	typedef int I;					//changer de type facilement dans tout les tableaux
    	typedef std::vector<I> T0;		// T1 a 1 dim
    	typedef std::vector<T0> T1;		// T2 a 1 dim
    	typedef std::vector<T1> T3;		//a 2 dimension contenant 2 autre tableaux  de type int ?
     
    	T3 MT3(20);					// déclaration 20 tableau pouvant contenir 2 autre tableaux  ?
    	MT3[0][0].push_back(1);                //on insert le 1er élément segment faults ?
    	//std::cout << MT3[0][0][1] << std::endl; //affichage du premier élément ,semenfault (acès non vérifier)?
     
    	return 0;
    }
    un petit coup de pouce s'il vous plaît

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 118
    Billets dans le blog
    148
    Par défaut
    Bonjour,

    L'idée est intéressante. Mais en fait, la chose que accepte le std::vector dans ces chevrons, c'est un type (de données) et non une variable.
    Si vous voulez faire un tableau 2D, vous pouvez faire comme suit (pour des int) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::vector < std::vector < int > > m_int2DArray;
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Mais en fait, la chose que accepte le std::vector dans ces chevrons, c'est un type (de données) et non une variable...
    Justement... il semble créer une floppée de "typedef" donc T1 est un type de donnée et pas une variable... non?

    L'erreur ne vient elle pas plus de la profondeur du vecteur?
    T0 = vector < int >
    T1 = vector < T0 > = vector < vector < int > >
    T3 = vector < T1 > = vector < vector < vector < int > > >

    Du coup:
    MT3[0][0].push_back() attend un vector < int > comme argument et pas un "int".

    Non?

    PS: Ceci ne conteste pas ce que dit LittleWhite qui a mon sens est tout à fait juste.

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 118
    Billets dans le blog
    148
    Par défaut
    Ah oui ... exact ... (trop de typedef pour moi).

    Mais du coup, il fait un tableau à trois dimensions

    Note : Le premier élément serait MT3[0][0][0]

    Note 2 : T3 MT3(20); créer bien 20 emplacements pour des std :: vector < std :: vector < int > > mais ne remplie ni même ne défini la taille des autres tableaux. Du coup, l'accès MT3[0][0][0] crashera ... et même le premier push_back() ( MT3[0][0].push_back(1) car ... le std::vector MT3[0] n'est pas définit (n'a pas d'espace correspondant d'alloué)
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre éclairé
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Note 2 : T3 MT3(20); créer bien 20 emplacements pour des std :: vector < std :: vector < int > > mais ne remplie ni même ne défini la taille des autres tableaux. Du coup, l'accès MT3[0][0][0] crashera ... et même le premier push_back() ( MT3[0][0].push_back(1) car ... le std::vector MT3[0] n'est pas définit (n'a pas d'espace correspondant d'alloué)
    En effet, le piège des profondeurs.

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533
    Par défaut
    Par curiosité, à quoi va te servir ton tableau 2D ?
    Si l'une des dimensions est connue à la compilation, tu peux envisager d'utiliser simplement une structure de N vecteurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    struct tabType {
    std::vector<T1> v1;
    std::vector<T2> v2;
    ...
    std::vector<TN> vN;
    };
    ou un vecteur de structures à N éléments
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    struct lineType { T1 e1; T2 e2; ...; TN eN; };
    std::vector<lineType> v;
    Si tu as effectivement besoin de gérer une matrice, regarde du côté des libs de calcul matriciel : OpenCV, uBlas, Eigen++, nt2, etc. Parce que les std::vector<...> imbriqués, ça devient vite inbuvable, et je ne suis pas certains que les perfs soient formidables.

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

Discussions similaires

  1. [Tableaux] tableau de deux dimention
    Par hadjiphp dans le forum Langage
    Réponses: 1
    Dernier message: 15/06/2009, 19h38
  2. manipulation des tableau de 2 dimention par c++ builder 5
    Par amel82 dans le forum C++Builder
    Réponses: 5
    Dernier message: 15/03/2009, 16h29
  3. tableau a double dimention
    Par fernier dans le forum VB.NET
    Réponses: 1
    Dernier message: 31/07/2008, 19h11
  4. tableau a 2 dimentions appelé dans une fonction
    Par epeichette dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 22/10/2007, 15h38
  5. Tableau 2 dimentions, pointeur
    Par DidierMesenbourg dans le forum C
    Réponses: 4
    Dernier message: 22/02/2005, 08h08

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