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 :

Vecteur Vs Matrice


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 108
    Points : 53
    Points
    53
    Par défaut Vecteur Vs Matrice
    Bonjour tout le monde,

    j ai implementer un programme qui dans le quel j utilise une matrice... pour mes premiers tests tout fonctionnaient correctment, mais plus tard j etais oblige de modifier sa taille... pour resoudre definitivement ce probleme ... je dois utiliser un vecteur de vecteur

    Comment remplir un vecteur de vecteur dans une boucle "for" !!
    est ce possible?!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    vector<vector<int>> matint;
    for (int i=0; i<100;i++) {
    vector<int> temp;
    for (int j=0; j<3;j++) {
    temp[j]=i*j;
    }
    matint[i]=temp;
    }

  2. #2
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Bonjour.

    Tout d'abord, oui il est possible de manipuler un vector de vector. La façon de faire sera sensiblement la même qu'avec un tableau à 2 dimension de type "C-style" (int tab[][]).

    Un peu de code pour te mettre sur la voie:
    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
    vector<vector<int>> tab; // tab est un vector de vector de int
     
    // il y a deux principales façon pour construire ce vecteur
    // construction par "remplissage" (utilisation de push_back)
    for ( int i=0; i<nbre_de_colonnes; ++i)
    {
       tab.push_back( vector<int> );   
       for (int j=0; j<nbre_de_lignes; ++j)
          tab[i].push_back( 5 ); // je met la valeur 5 dans la "case" tab[i][j]
    }
     
     
    // réinitialisation de tab (on le désalloue pour le reconstruire d'une autre façon)
    vector<vector<int>>().swap( tab );
     
    // construction par "pré-allocation": il faut connaitre la taille avant
    tab.reserve( nbre_de_colonnes ); // ici on alloue la mémoire (pour les lignes)
    for (int i=0; i<nbre_de_colonnes; ++i )
       tab[i].reserve( nbre_de_lignes ); // et là on alloue les colonnes
     
    // ensuite on rempli
    for ( int i=0; i<nbre_de_colonnes; ++i)
       for (int j=0; j<nbre_de_lignes; ++j)
          tab[i][j] = 5; // je met la valeur 5 dans la "case" tab[i][j]
     
    // ensuite, quelle que soit la façon ton tu as construis tab, pour accéder à une valeur tu peux faire tab[i][j], 
    en s'assurant bien sûr que i et j sont dans les limites
    }
    A noter que:
    1. dans cet exemple, j'utilise des boucles basées sur des entiers, mais il serait mieux (de façon générale) d'utiliser des itérateurs.
    2. pour la construction d'un vecteur, il est conseillé d'utiliser la fonction generate(). (voir par exemple cet article)

    Pour finir, le mieux reste tout de même de rester en une seule dimension et de faire la conversion en 2 dimensions seulement au niveau de l'interface. Par exemple, le prototype d'une class matrice devrait ressembler à ceci:
    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
    template <typename T>
    class 2dMatrix
    {
    public:
    	// constructeurs, destructeurs, etc...
     
    	// mutateur
    	T & operator () ( const size_t col, const size_t row )
    	{
    		return m_array[m_nbCol*row+col];
    	}
     
    	// accesseur
    	T operator () ( const size_t col, const size_t row ) const
    	{
    		return m_array[m_nbCol*row+col];
    	}
     
    private:
        std::vector<T> m_array;
    };
    Hope it helps.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

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

Discussions similaires

  1. Valeurs et vecteurs propres matrice réelle
    Par The Ultimate Gibbon dans le forum Fortran
    Réponses: 2
    Dernier message: 23/09/2008, 15h13
  2. Réponses: 9
    Dernier message: 19/09/2008, 08h54
  3. Boost.uBlas et sous-vecteur de matrice
    Par Le Farfadet Spatial dans le forum Boost
    Réponses: 11
    Dernier message: 30/04/2008, 23h25
  4. Empiler des éléments de N vecteurs en Matrice?
    Par maiza_med dans le forum MATLAB
    Réponses: 3
    Dernier message: 28/04/2008, 11h56
  5. [Débutant] Manipulation de vecteurs et matrices
    Par nanath02 dans le forum MATLAB
    Réponses: 6
    Dernier message: 04/11/2007, 15h36

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