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 d'un vecteur


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 158
    Par défaut vecteur d'un vecteur
    Bonjour,

    J'essaye de manipuler les vector dans C++ , sauf que la j'arrive pas à afficher le contenu de mes vecteur.quelqu'un peut m'aider svp ?

    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
     
    #include <stdio.h>
    #include <string>
    #include <vector>
     
    using namespace std;
     
    struct identifiant {int a;int b;int c; };
     
    int main()
    {
        vector<vector<identifiant> > MonVect;
        identifiant L,K,M;
     
        L.a=1;L.b=5;L.c=20;
        K.a=2;K.b=20;K.c=2;
        M.a=9;M.b=8;M.c=3;
     
        MonVect[0].push_back(L);
        MonVect[0].push_back(K);
        MonVect[1].push_back(M);
     
        printf("<%d-%d-%d>",MonVect[1][0].a,MonVect[1][0].b,MonVect[1][0].c);
     
        return 0;
    }

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par défaut
    Salut

    Ca ne peut pas fonctionner car tu n'as pas alloué la mémoire pour les éléments de la dimension 1.

    Si tu utilises ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::vector< std::vector< identifiant > > MonVect(2);
    Cela va fonctionner. Au passage, printf, c'est du C, autant faire du C++ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #include <iostream>
    // Suite du code 
    std::cout << '<' << MonVect[1][0].a << '-' << MonVect[1][0].b << '-' << MonVect[1][0].c << std::endl;

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 158
    Par défaut
    Merci pour réponse ,

    Une autre question si vous me permettez.
    Est ce qu'il y a une fonction prédéfinie dans C++ pour ajouter des ligne dynamiquement dans un vecteur sans redimensionner le vecteur.
    Exemple :
    Si j'ai un vecteur de 2 dimensions
    1 2 3
    6 7 8

    aprés l'ajout d'une ligne j'aurai :
    1 2 3
    4 5 90
    6 7 8

    sans redimensionné le tableau càd sans décaler la ligne 6 7 8.(elle se décale toute seul)

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par défaut
    Salut

    Oui, l'intérêt de certains conteneurs de la STL est justement de pouvoir les modifier dynamiquement. Cette opération peut être faite avec insert, voir ici.

    Si tu dois réaliser beaucoup d'insertions et que tu accèdes peu à la liste en lecture, tu peux aussi considérer l'usage de std::list plutôt que de std::vector. C'est une liste chaînée, plus adaptée à ce type d'opération, mais dont la lecture est plus fastidieuse et plus lente (pas d'opérateur []).

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 158
    Par défaut
    Je vous remercie encore ,
    mais j'ai rien compris dans cette fonction insert !! c'est quoi Iterator ?
    dans ce petit exemple si je veux ajouter une ligne entre les deux vecteurs , je ferai quoi svp ?

    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
     
    struct identifiant {int a;int b;int c; };
     
    int main()
    {
        vector<vector<identifiant> > MonVect;
        vector<identifiant> vect;
        identifiant L,K;
     
        L.a=1;L.b=5;L.c=20;
        K.a=2;K.b=20;K.c=2;
     
     
        vect.push_back(L);
        MonVect.push_back(vect);
     
        vect.push_back(K);
        MonVect.push_back(vect);
     
        return 0;
    }

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par défaut
    Salut

    vect.begin() est un itérateur. C'est un objet de la STL fort utile. Es-tu bien sûr d'avoir besoin d'imbriquer deux vectors ? Voici un exemple d'insertion dans un vector simple :

    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>
     
    struct identifiant {int a;int b;int c; };
     
    int main()
    {
    	std::vector< identifiant > vect;
        identifiant L,K, M;
     
        L.a=1;L.b=5;L.c=20;
        K.a=2;K.b=20;K.c=2;
        M.a=9;M.b=8;M.c=3;
     
    	// On met L et M
        vect.push_back(L);
    	vect.push_back(M);
     
    	// On insère K entre les deux :
    	vect.insert(vect.begin() + 1, K);
     
    	// Exemple d'utilisation des itérateurs pour l'affichage
    	for(std::vector< identifiant >::iterator it = vect.begin(); it != vect.end(); it++)
    	{
    		std::cout << it->a << ',' << it->b << ',' << it->c << std::endl;
    	}
     
        return 0;
    }

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

Discussions similaires

  1. [Défis][1] Vecteur colonne ou vecteur ligne ?
    Par Jerome Briot dans le forum Contribuez
    Réponses: 19
    Dernier message: 26/06/2012, 15h00
  2. Réponses: 3
    Dernier message: 04/08/2011, 14h15
  3. transformer un vecteur ligne en vecteur colonne
    Par samiov dans le forum MATLAB
    Réponses: 4
    Dernier message: 26/03/2010, 09h42
  4. découper un vecteur en sous vecteur
    Par FstDsi dans le forum Débuter
    Réponses: 2
    Dernier message: 04/08/2009, 21h46

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