Vecteur de vecteur C++
Fermé
Moldave72
Messages postés
5
Date d'inscription
jeudi 21 mars 2013
Statut
Membre
Dernière intervention
3 janvier 2014
-
Modifié par Moldave72 le 21/03/2013 à 19:16
mamiemando Messages postés 33535 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 12 février 2025 - 25 mars 2013 à 19:21
mamiemando Messages postés 33535 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 12 février 2025 - 25 mars 2013 à 19:21
A voir également:
- Comment écrire un vecteur sur google doc
- Google maps satellite - Guide
- Dns google - Guide
- Créer un compte google - Guide
- Google maps - Guide
- Fichier .doc - Guide
2 réponses
mamiemando
Messages postés
33535
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
12 février 2025
7 828
Modifié par mamiemando le 22/03/2013 à 01:32
Modifié par mamiemando le 22/03/2013 à 01:32
Je dois fabriquer un vecteur de string correspondant à des noms
(déja je sais que ce n'est pas un tableau car ils ont une taille fixée)
Que je devrais remplir petit a petit donc de taille changeant et non définie.
(ca non plus je ne sais as comment faire)
Le mieux ce serait que tu lises la documentation de la classe template std::vector :
http://www.cplusplus.com/reference/vector/vector/
... et cette introduction à la STL :
https://forums.commentcamarche.net/forum/affich-37604421-introduction-a-la-stl-en-c-standard-template-library
Tu verras qu'un std::vector est de taille virtuellement infinie, que tu peux y ajouter des éléments avec la méthode push_back et que tu peux éviter des reallocs avec la méthode reserve.
Ensuite dans ton cas tu dis que pour chaque case de ce vector tu veux à la fois une chaine tu veux associer un std::vector<int>, donc soit chaque case du premier vector stocke une paire contenant une std::string et un std::vector<int> ce qui donnerait :
... soit si tu n'as pas besoin d'indexer les éléments du premier vector, tu peux plus simplement utiliser une map qui associe à une string un vecteur d'entier :
je n'arrive pas à créer ces vecteurs encore moins a m'y ballader n'y a y écrire correctement...
Pour accéder au ième élément d'un vector tu peux utiliser l'opérateur [].
https://forums.commentcamarche.net/forum/affich-37604421-introduction-a-la-stl-en-c-standard-template-library
Pour itérer dessus tu peux utiliser des (const_)(reverse_)iterator, voir lien précédent ou directement l'opérateur [].
Bonne chance
(déja je sais que ce n'est pas un tableau car ils ont une taille fixée)
Que je devrais remplir petit a petit donc de taille changeant et non définie.
(ca non plus je ne sais as comment faire)
Le mieux ce serait que tu lises la documentation de la classe template std::vector :
http://www.cplusplus.com/reference/vector/vector/
... et cette introduction à la STL :
https://forums.commentcamarche.net/forum/affich-37604421-introduction-a-la-stl-en-c-standard-template-library
Tu verras qu'un std::vector est de taille virtuellement infinie, que tu peux y ajouter des éléments avec la méthode push_back et que tu peux éviter des reallocs avec la méthode reserve.
Ensuite dans ton cas tu dis que pour chaque case de ce vector tu veux à la fois une chaine tu veux associer un std::vector<int>, donc soit chaque case du premier vector stocke une paire contenant une std::string et un std::vector<int> ce qui donnerait :
typedef std::vector< std::pair< std::string, std::vector<int> > > mon_type_t; mon_type_t x; x.push_back(std::make_pair("coucou", std::vector<int>(5)))
... soit si tu n'as pas besoin d'indexer les éléments du premier vector, tu peux plus simplement utiliser une map qui associe à une string un vecteur d'entier :
typedef std::map< std::string, std::vector<int> > mon_type_t; mon_type_t x; x["coucou"] = std::vector<int>(5);
je n'arrive pas à créer ces vecteurs encore moins a m'y ballader n'y a y écrire correctement...
Pour accéder au ième élément d'un vector tu peux utiliser l'opérateur [].
https://forums.commentcamarche.net/forum/affich-37604421-introduction-a-la-stl-en-c-standard-template-library
Pour itérer dessus tu peux utiliser des (const_)(reverse_)iterator, voir lien précédent ou directement l'opérateur [].
std::vector<int> v; v.push_back(1); v.push_back(4); v.push_back(3); // Méthode 1 for(std::size_t i = 0; i < v.size(); ++i) { std::cout << v[i] << std::endl; } // Méthode 2 for(std::vector<int>::const_iterator vit = v.begin(); vit != v.end(); ++vit) { std::cout << *vit << std::endl; } // Méthode 3 (requiert la librarie boost // #include <boost/foreach.hpp> // https://www.boost.org/doc/libs/1_53_0/doc/html/foreach.html BOOST_FOREACH(int x, v) { std::cout << x << std::endl; }
Bonne chance
22 mars 2013 à 08:02
J'entame la digestion de ta réponse de suite !
25 mars 2013 à 18:42
J'ai exploré plusieurs voies, des classes, des structures, et j'ai fini par adopter un peu un peu comme ci les paires que je trouve élégantes avec ce que je veux faire, Merci mamiemando
Mais, je ne sais pas pourquoi, à un moment ça marchait, et maintenant, ça ne veut plus.
J'ai mis des bouts du code avec l'endroit ou ça plante... C'est sûrement une question idiote
Mais buter seul durant des heures sur ce genre de problème me rend fou.
Alors si quelqu'un peut me donner un coup de pouce, merci.
#include <iostream>
#include <vector>
#include <string>
#include <iterator>
#include <utility>
using namespace std;
pair<string,vector<int> > ligne_1; // je la déclare ici
vector<string> nom_modul;
vector<int>tab_des_bin;
pair<string,vector<int> > ligne_1(nom_modul.at(0),tab_des_bin);
/* ICI il me dit que le declarator est invalide et je ne comprends pas pourquoi */
vector<pair<string,vector<int> > > TEST(0);
cout<<TEST.size()<<endl;
...