2012-12-05 4 views
1

J'ai un tableau comme ça:confusion sur les tableaux

int sizes[5] = {1,2,3,4,5}; 

Je veux avoir 5 tableaux différents en utilisant le tableau ci-dessus. Parce que je veux que chacun de mes tableaux pour avoir la taille de sizes[i](0 < = i < 5). Comment puis je faire ça? Plus je réfléchis à cela, plus je deviens confus. Dois-je utiliser des tableaux multidimensionnels ou simplement une solution plus simple? Merci d'avance.

+1

donc vous voulez 5 tableaux d'un élément? votre question ne fait pas son sens –

+0

Je veux que mon premier tableau à avoir une taille de 1, la deuxième est 2, et ainsi de suite. – w1LL1ng

Répondre

1

simple, il vous suffit d'allocation de mémoire dynamique:

int sizes = {1, 2, 3, 4, 5}; 
int **arrays; 
int i; 

arrays = new int*[5]; 
for(i = 0; i < 5; i++) 
    arrays[i] = new int[sizes[i]] 

Ceci est une chose simple pour commencer, mais dans la vie réelle des bibliothèques STL sont beaucoup plus utiles. Dans ce code, la mémoire est allouée dynamiquement, mais pas libérée. Cela peut entraîner une fuite de mémoire. L'utilisation de std::vector de la bibliothèque STL vous évitera les tracas et vous facilitera la tâche.

@Mikhail a montré une bonne démonstration de l'utilisation vector s ci-dessous.

+2

Ne dites pas à un homme qui demande une telle chose d'utiliser 'new'. Dites-lui d'utiliser 'std :: vector'. – Mikhail

+0

@Mikhail Seul un bon C++ livre aide ici – exagi

+0

@ 0605002 Que puis-je faire si je veux remplir tous mes tableaux avec des nombres aléatoires? – w1LL1ng

1

pour répondre à la question, oui, vous avez besoin d'un tableau multidimensionnel dans le cas le plus efficace. Un tableau de tableaux, alors que les éléments sont alloués dynamiquement (en considérant le nombre de tableaux que vous avez spécifié est constant).

int *Array[5]; 
for(int i = 0; i < sizes; i++) 
{ 
    Array[i] = new int[sizes[i]]; 
} 

vous avez maintenant 5 tableaux alloués dynamiquement allant de la taille 0 à la taille 5.

1

Vous devez utiliser une allocation dynamique, quelque chose comme ceci:

int *arrays[5]; 
int i = 0; 
int sizes[] = {1,2,3,4,5}; 
for(i = 0; i < 5; i++) 
{ 
    arrays[i] = (int *)malloc(sizes[i]); 
} 
5

Je demande STL dans la fil!

std::vector<int> arrays[5]; 
for (i = 0; i < 5; ++i) 
    arrays[i].resize(sizes[i]); 
3

Comme je l'ai bien compris la question, vous avez besoin tableau de tableaux dont la longueur peut être dans la gamme [0, 5] (avec longueur variable).

Donc, il y a beaucoup de choix, je vous offre 2 d'entre eux:

  1. Comme vous avez marqué votre question tag C ++ Je vous offre à consulter STL, qui offrent une beaucoup de conteneurs pratiques et l'un d'eux est std::vector qui est tableau dynamique (taille de celui-ci peut varier).

  2. Si vous remplissez avec pratique C, vous pouvez utiliser un tableau de pointeurs , chacun d'entre eux seront pointeur sur tableau.