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
Bonjour,

Je n'y connait rien mais alors rien en C++
D'ou mon grand grand désarroi face au probleme que je vais vous poser :

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)
Puis face à ce vecteur je devrais associer à chacune de ses cases, un autre vecteur de INT
de taille variable. Comme si le premier vecteur de noms donnait en face de chaque nom une liste de chiffre (taille inconnue)
( encore a remplir petit a petit et pas dans l'ordre)

je n'arrive pas à créer ces vecteurs encore moins a m'y ballader n'y a y écrire correctement...

Je dois faire plusieurs de ces vecteurs, et faire en sorte qu'ils soient repérables, comme des familles, ou des classes apparement.
En gros, cela devrait donner l'impression que ce sont des tableaux, mais avec plusieurs types a l'interieur.

Si quelqu'un pouvait m'aider, a comprendre comment qu'ça marche t'y tout ça. Je le remercie d'avance, GRANDEMENT.

Même le site du 0 ne m'aide pas beaucoup car je n'arrive pas a faire la jonction avec toutes les leçons.

A voir également:

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

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
1
Moldave72 Messages postés 5 Date d'inscription jeudi 21 mars 2013 Statut Membre Dernière intervention 3 janvier 2014
22 mars 2013 à 08:02
Merci beaucoup !
J'entame la digestion de ta réponse de suite !
0
Moldave72 Messages postés 5 Date d'inscription jeudi 21 mars 2013 Statut Membre Dernière intervention 3 janvier 2014
25 mars 2013 à 18:42
Rebonjour,
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;
...
0