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

SL & STL C++ Discussion :

vector de vector


Sujet :

SL & STL C++

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 31
    Par défaut vector de vector
    Bonjour à tous,

    Je suis débutant en C++ et je voudrai stocker des entiers dans un tableau:

    Jusque ici je c'est faire. Mon problème, c'est que je veut ensuite ranger ce tableau (qui peut etre de longueur différente du précédent) dans une case d'un autre tableau.

    Exemple je veux ranger:

    ligne1 : 1 5 6 8 0 4 6
    ligne2 : 1 6 8 12 48
    ligne3 : 4 25 8 49 2 7 53 6 8 12 48
    ligne4 : 8 16 48
    ligne5 : 3 48 52 2 21 3 6 9 19 20 15 46 8 25 6 9 4 38 16 48
    etc..

    en imaginant une structure ligne / colonne
    En cherchant sur le forum, j'ai trouvé un truc intéressant et je m'en suis inspiré:

    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
    	//Création du tableau des solutions
       	std::vector < std::vector<int> > Vect_solu_i;   
    	for (int nd = 0; nd < Vect_s.size(); nd++)
    	{
    		std::vector <int> Vect_solu_j;      //vide
    	 	for (int i = 0; i < Vect_i.size(); i++)
    		{
    			if (cplex.getValue(PHI[nd][i]) == 1)
    			{
    				Vect_solu_j.push_back(Vect_j[i]);  //ajoute Noeud j à Vect_solu_j
    				Vect_solu_j.push_back(Vect_i[i]);  //ajoute Noeud i à Vect_solu_j
    			}
    		}
    		Vect_solu_i.puch_back(Vect_solu_j); //ajoute Vect_solu_j à Vect_solu_i       //Erreur compilateur ici
    	}
    A la complilation, j'ai l'erreur:
    Error: puch_back is not a member of std::vector<std::vector<int, std::allocator<int>>, std::allocator<std::vector<int, std::allocator<int>>>>.
    Je voudrais savoir si je travaille avec une bonne solution ou s'il n'existe pas d'autres objets plus pratiques. J'ai vu par si par là, des objets "List" mais je ne sais pas comment ça marche te quels sont les avantages.

    Si quelqu'un peut me donner un coup de pouce.

    Merci.

  2. #2
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2006
    Messages : 58
    Par défaut
    L'erreur de compilation correspond à... une faute de frappe ! Remplace le puch_back par un push_back et ca devrait aller mieux.

    A priori je ne vois pas de contre-indicationà ta solution, mais je ne connais pas vraiment la classe list.

    Juste une remarque : tu ne vides jamais ton vecteur vect_solu_j, donc lors de la 2ème itération sur la boucle for intérieure, les valeurs de la 1ère itération seront toujours présentes, et tu auras des doublons partout. Peut-être faut-il envisager un vect_solu_j.clear() après le vect_solu_i.push_back ?

  3. #3
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Les listes ont un push_back et un push_front, mais d'autres choses en moins. Dans ton cas, une liste peut être mieux ou pas. Tu accèdes après aux éléments du vecteur de vecteurs comment ?

  4. #4
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 54
    Par défaut
    Faudrait pas plutot que le premier gros vecteur qui encapsule le deuxieme soit un tableau de pointeurs vers les autres petits vecteurs colonnes ?

  5. #5
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2006
    Messages : 58
    Par défaut
    C'est une solution mais si tu fais ca il faut faire gaffe à libérer la mémoire des pointeurs... le vector<vector<int> > a l'avantage de gérer la mémoire tout seul

  6. #6
    Membre chevronné Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Par défaut
    Faudrait pas plutot que le premier gros vecteur qui encapsule le deuxieme soit un tableau de pointeurs vers les autres petits vecteurs colonnes ?
    Quel est l'intérêt d'utiliser un tableau de pointeur sur des vector ???
    Pourquoi pas un vector de vector ???

    Sinon pour savoir quel conteneur utiliser dans quel cas, voir la FAQ, il y a un diagramme joliment fait...

  7. #7
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 54
    Par défaut
    En fait je pense que ce que Clark a fait est bon mais comme il ne donne pas de nouvelles...

  8. #8
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 31
    Par défaut
    Désolé je suis allé mangé entre temps.

    En effet c'était juste une erreur de frappe, je suis naze, j'avais pas fait gaffe.

    touco -> tu as raison je dois faire un "vect_solu_j.clear()"

    Miles -> Merci pour tes précisions sur les "List"

    J'avais bien compris l'avantage des <vector<int> > avec la gestion de la mémoire auto. C'est pour ça que je les utilise.

    Merci à tous, ça marche.

    Sinon dernière question, ou peut on trouver les API Standarts de C++.
    Car en fait j'ai plus l'habitude de programmer en Java. Et C++ je débute, c'est la vérité...
    Ou peut - on trouvé ça? Si cela s'appelle aussi comme ça en C++?

  9. #9
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2006
    Messages : 58
    Par défaut
    Pour tous les containers standard (list, vector, etc) ca s'appelle la Standard Template Library (ou STL en abrégé). Une recherche google te donnera une profusion de liens et tutoriels.

    Perso j'utilise MSDN comme source d'informations, les classes STL y sont bien documentées

  10. #10
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 31
    Par défaut
    Très Bien, Merci.

    @+.

  11. #11
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Mieux, le site de SGI

    Si tu sais la taile de ton vecteur englobat les autres, fait un reserve avant pour lui dire de reserver la taille adéquate dès le départ, ça évitera des recopies

  12. #12
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651

  13. #13
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Faire des push_back dans une boucle alors qu'on connait la taille du tableau à sa création c'est un peu stupide...

  14. #14
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Pourquoi ? Avec éventuellement un reserve préalable, je ne connais pas de meilleure méthode.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  15. #15
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Avec éventuellement un reserve préalable
    Justement, y'en a pas.

    je ne connais pas de meilleure méthode.
    Utiliser le constructeur.

  16. #16
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Ben il devrait le faire s'il connait la taille.

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/12/2009, 21h24
  2. Réponses: 5
    Dernier message: 03/05/2007, 00h20
  3. Réponses: 8
    Dernier message: 22/12/2006, 22h36
  4. [ Vector Fichier ] Vector dans fichier texte
    Par geegee dans le forum Langage
    Réponses: 5
    Dernier message: 21/05/2004, 13h56
  5. [Vector] classe Vector et exception
    Par Nanoua dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 23/04/2004, 12h37

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