begin process at 2012 05 28 09:37:45
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Débutant(e)

 > 

augmenter dynamiquement la taille d'un vecteur 2D


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

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++ :
int tabBRUT[973];

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

Administrateur CodeS-SourceS
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

Administrateur CodeS-SourceS

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

Administrateur CodeS-SourceS

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

Administrateur CodeS-SourceS
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++ :
tab.push_back(subTab);

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

Administrateur CodeS-SourceS
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

1 2

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


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,310 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales