Accueil > Forum > > > > augmenter dynamiquement la taille d'un vecteur 2D
augmenter dynamiquement la taille d'un vecteur 2D
mardi 27 septembre 2011 à 12:53:11 |
augmenter dynamiquement la taille d'un vecteur 2D

snake57
|
Bonjour à tous,
je voudrais pouvoir créer dynamiquement un tableau 2D en C++, donc d'après mes recherche c'est les vecteurs qu'il faut utiliser.
J'ai donc déclaré mon vecteur 2D comme ceci :
Code C/C++ : std::vector<std::vector<int>> tabTRI;
J'ai un autre tableau qui lui n'a qu'une dimension et qui contient 973 entiers :
Code C/C++ :
Dans ce tableau les '0' sont enfait des séparateurs, ce sont les autres chiffres qui m'intéressent.
Ce que je veux faire c'est très simple je pense. Je balaye mon tabBRUT pour le recopier dans mon tabTRI et dès que je vois un zéro j'agrandis ma seconde dimension de 1.
un truc de ce genre:
Code C/C++ : for(i=0;i<974;i++)
{
if(tabBRUT(i)!=0) //si la valeur ne vaut pas 0
{
tabTRI[X=X+1][Y] //on augmente la première dimension du tableau
tabTRI[X][Y]=tabBRUT(i) //on range la valeur
}
else //si la valeur vaut 0
{
tabTRI[X][Y=Y+1] //on augmente la deuxième dimension du tableau
}
}
Le problème que j'ai c'est que je ne sais pas comment augmenter les dimensions de mes vecteurs, ni comment remplir un vecteur 2D :(
Quelqu'un peux me débloquer svp?
|
|
mardi 27 septembre 2011 à 13:02:19 |
Re : augmenter dynamiquement la taille d'un vecteur 2D

CptPingu
|
Je ne sais pas trop ce que tu cherches à réaliser, mais voici quelques éléments de réponses:
- Un std::vector se redimensionne tout seul, dès que tu ajoutes des éléments dedans (via .push_back() par exemple)
- Tu peux préallouer une taille via .resize()
- N'oublie pas de lire le documentation: http://www.cplusplus.com/reference/stl/vector/
Enfin, avoir un std::vector de std::vector c'est assez moyen... Il y a potentiellement un problème de conception.
Les questions à se poser:
- Est-ce que les dimensions sont fixes ?
- Est-ce que pour chaque case de mon std::vector j'aurais des std::vector de même taille ou non ?
________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
|
|
mardi 27 septembre 2011 à 13:12:25 |
Re : augmenter dynamiquement la taille d'un vecteur 2D

snake57
|
Je ré-explique plus clairement ce que je veux. J'ai un tableaux que j'appelle tabBRUT, il est composé de 973 entiers.
Je veux ranger son contenu dans un tableau 2D que j'appelle tabTRI.
Code C/C++ : //contenu de tabBRUT (tableau 1 dimension de départ)
15
2
9
654
84
15
0
678
184
5
0
646
687
11
158
0
127
0
154
2
//contenu de tabTRI (tableau 2 dimensions après traitement)
15 678 646 127 154
2 184 687 2
9 5 11
654 158
84
15
Maintenant c'est vrai que les vecteurs ne sont peut être pas la bonne solution, dans ce cas tu me conseil quoi?
|
|
mardi 27 septembre 2011 à 13:21:13 |
Re : augmenter dynamiquement la taille d'un vecteur 2D

CptPingu
|
Maintenant c'est vrai que les vecteurs ne sont peut être pas la bonne solution
Je n'ai pas dit que ce n'était pas la bonne solution. Je t'ai juste dit de te poser des questions de conception. Un std::vector de std::vector n'est approprié que dans des cas assez particuliers. Notamment quand tu as un tableau qui contient des tableaux de tailles différentes. C'est ici le cas.
Dans ce cas, tu n'as besoin de faire que des push_back().
Algo:
Code C/C++ :
Tu crées un std::vector<std::vector<int> >
Pour debut à fin du tableau brut
Tu crées un std::vector<int>.
pour chaque case qui n'est pas 0
ajout via push_back() de l'élément au tableau
fin pour
Si la case est 0
ajout du tableau temporaire au tableau de tableau.
fin si
fin pour
________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
|
|
mardi 27 septembre 2011 à 13:28:56 |
Re : augmenter dynamiquement la taille d'un vecteur 2D

snake57
|
Je ne comprends pas ce que tu dis lorsque tu dis : ajout du tableau temporaire au tableau de tableau.
Au moment ou toi tu fais ça, c'est la que je dois augmenter de 1 une des dimensions de mon tableau.
De plus quand tu dis : pour chaque case qui n'est pas 0
on est bien d'accord que c'est un if qu'il faut faire, pas un for?
|
|
mardi 27 septembre 2011 à 13:32:58 |
Re : augmenter dynamiquement la taille d'un vecteur 2D

CptPingu
|
c'est la que je dois augmenter de 1 une des dimensions de mon tableau.
Je viens de te le dire, tu ne te soucis pas de l'augmentation de la taille du tableau, c'est automatique...
Tu fais juste des ajouts au tableau via des push_back().
on est bien d'accord que c'est un if qu'il faut faire, pas un for?
Je te laisse réfléchir, je suis sur que tu peux trouver cette réponse par toi même.
Tu devrais pouvoir écrire ton algo maintenant.
________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
|
|
mardi 27 septembre 2011 à 14:19:09 |
Re : augmenter dynamiquement la taille d'un vecteur 2D

snake57
|
Je suis entrain d'essayer push_back, mais je n'arrive pas à l'utiliser sur un vecteur 2D :(
Si il n'aurait qu'une dimension sa donnerait cela tabTRI.push_back(tabBRUT(i))
Mais comment faire quand il y'a deux dimensions?
De plus avec push_back on est obligé de donner une valeur à écrire dans la case du tableau et quand moi je détecte un zéro il faudrait que je fasse un push_back sur la première dimension mais sans rien écrire dedans.
Je vois pas trop comment faire la
|
|
mardi 27 septembre 2011 à 14:29:07 |
Re : augmenter dynamiquement la taille d'un vecteur 2D

CptPingu
|
tabTRI.push_back(tabBRUT(i)); => tabTRI.push_back(tabBRUT );
Mais comment faire quand il y'a deux dimensions?
Pour un "vecteur2D", c'est ultra simple. Petit exemple:
Code C/C++ :
std::vector<std::vector<int> > tab;
std::vector<int> subTab;
subTab.push_back(45);
subTab.push_back(2);
subTab.push_back(789);
tab.push_back(subTab);
De plus avec push_back on est obligé de donner une valeur à écrire dans la case du tableau et quand moi je détecte un zéro il faudrait que je fasse un push_back sur la première dimension mais sans rien écrire dedans.
Si tu as un zéro, il te suffit de ne rien faire tout simplement.
________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser [i]Réponse acceptée si un post répond à votre question
|
|
mardi 27 septembre 2011 à 14:48:16 |
Re : augmenter dynamiquement la taille d'un vecteur 2D

snake57
|
Bon plus tu m'explique moins je comprends mdr, il doit certainement y avoir une petite notion qui me manque...
lorsque tu fais ceci :
Code C/C++ :
Enfait tu mets les 3 valeurs de subTab dans tab? c'est bien ça?
Mais vu que ton tab est en 2D tu fais comment pour rappeller tes valeurs après?
Est ce que Code C/C++ : std::cout << tab(0,0) << tab(0,1) << tab(0,2); renvoie 452789?
Admettons que ce soit bien ça et admettons que tu ai un autre subTab, par exemple subTab2 et que tu veuilles mettre celui ci dans tab(1,0) tab(1,1) tab(1,2) etc... tu ferais comment?
|
|
mardi 27 septembre 2011 à 14:56:45 |
Re : augmenter dynamiquement la taille d'un vecteur 2D

CptPingu
|
std::vector de std::vector n'est pas un tableau 2D, d'ailleurs une telle notion n'existe pas.
En informatique, un tableau à 2 dimensions est en fait un tableau contenant des tableaux.
En faisant tab.push_back(subTab), j'ajoute un tableau dans mon tableau.
Ex graphique:
Code :
Soit le valeurs 1, 2, 3, 0, 4, 0, 5, 6 à mettre dans un tableau à double dimensions (0 comme séparateur).
J'aurais les tableaux [1, 2, 3] et [4] et [5, 6] que je met dans un tableau (qui contient des tableaux).
Soit: [ [1, 2, 3], [4], [5, 6] ]
Donc
- À la case 0, j'ai [1, 2, 3]. Et donc à la case 0,0, j'ai 1, à la case 0,1 j'ai 2 et à la case 0,2 j'ai 3.
- À la case 1, j'ai [4]. Et donc à la case 1,0 j'ai 4.
- À la case 2, j'ai [5, 6]. Et donc à la case 2,0 j'ai 5, à la case 2,1 j'ai 6
Attention, pour accéder au élément ce n'est pas tab(x, y) mais tab[x][y].
________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
|
|
Cette discussion est classée dans : code, tableau, vecteur, 2d, tabtri
Répondre à ce message
Sujets en rapport avec ce message
pointer vers un tableau 2d [ par Adeon ]
salut ! je suis en train de creer une fonction qui doit inclure un tableau 2d dont on ne connait pas les valeurs.si je fais :void fonction(char *tab){
fonction qui retourne un vecteur en C/C++ [ par rocketcariboo ]
Je voudrais savoir comment on fait une fonction qui prend un tableau et qui retourne un autre tableau. Quelle est la façon la plus simple. Je sais qu'
Passer un tableau 2D en paramètre en C [ par poiuytrez3 ]
Bonjour, je souhaiterai passer en paramètre un tableau 2D, mais j'ai une erreur de compilation, voici mon code: #include #include void remplissage
Tri tableau de structure [ par chental ]
Salut à tous,Quelqun pourrait m'aider à trier à un tableau de structure ?Tri par nom et code;j'essaie le qsort mais je n'y arrive pasVoici ma structur
Produit de convolution 2D [ par dartal ]
Salut ! Je dois realiser un produit de convolution pour pouvoir filtrer une image avec un masque ( un tableau de taille 3*3 )... J'ai reussi à
Tableau de STRING comme paramètre [ par guiguimac ]
Bonjour !est-ce que qq'un parmi vous aurait sous la main un code qui montre comment passer comme paramètre à une fonction un tableau de type STRING ..
Tableau 2D en C [ par cyberlewis ]
Svp,Comment je peux faire un tableau 2D du genretab[0][0]="A45DFA8A9A"J'ai besoin de 20*11 entrées dans le tableauComment le définir svp aussi ?Donc q
Probleme de caractere dans un tableau [ par byoushin ]
Bonjour,J'ai un tableau a 2 dimensions qui ressemble a ca :0 1 2 3 4 5 6 7 8 91 0 0 0 0 0 0 0 0 02 0 0 0 0 0 0 0 0 03 0 0 0 0 0 0 0 0 04 0 0 0 0
[C++ Vecteur qui se re-initialise] [ par _gwada_ ]
Bonjours, - j'ai un problème avec un pti projet pour une épreuve, j'ai une classe (Atelier) contentent un tableau de vecteur de type Roues4.Cette cla
Où placer un immense tableau? [ par malik7934 ]
salut,Dans mon code, j'ai un dictionnaire, stylechar dico[2048] = { "A", "ABE", "ACE", ... , "YOGA", "YOKE" };Il y a 2048 entrées. J'aurai a
Livres en rapport
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
RE : SAC A DOS RE : SAC A DOS par hadjkaddour
Cliquez pour lire la suite par hadjkaddour
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|