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++

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 158
    Points : 72
    Points
    72
    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
    Points : 3 156
    Points
    3 156
    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;
    Find me on github

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 158
    Points : 72
    Points
    72
    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
    Points : 3 156
    Points
    3 156
    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 []).
    Find me on github

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 158
    Points : 72
    Points
    72
    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
    Points : 3 156
    Points
    3 156
    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;
    }
    Find me on github

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 158
    Points : 72
    Points
    72
    Par défaut
    Oui dans mon projet je dois avoir une structure du genre :

    <a,b,v><g,b,n>
    <i,k,o>
    <i,g,m><v,b,n><n,j,k>
    ....

    je ne sais pas combien de <..> j'aurai dans une ligne et combien dans une colonne. et je peut ajouter au milieu à tout moment.
    pour cela je suis entrain d'utiliser les tableaux dynamique.

    suggérez-vous une meilleur solution ?

  8. #8
    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
    Points : 3 156
    Points
    3 156
    Par défaut
    Non non, c'est très bien. Tu as compris l'insertion ?
    Find me on github

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 158
    Points : 72
    Points
    72
    Par défaut
    Pour l'exemple que tu m'as donné oui j'ai compris, merci .
    une dernière question ( puisque t'es la en profite :p )
    maintenant pour ajouter entre les ligne tu m'as expliquer. mais si je veux ajouter dans la meme ligne d'autre vecteur.exemple
    <a,b,c>
    <x,y,z>

    j'aurai
    <a,b,c><j,k,l>
    <x,y,z>

    dois-je supprimer toute l'ancienne ligne et réinséré la nouvelle ?

  10. #10
    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
    Points : 3 156
    Points
    3 156
    Par défaut
    Non, tu as juste à faire un push_back ou un insert sur la ligne en question pour ajouter l'identifiant où tu veux.
    Find me on github

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 158
    Points : 72
    Points
    72
    Par défaut
    Ok, Merci

+ 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