C++ 2 dimensions tableau à taille variable des lignes
Comment pouvez-vous créer un tableau 2D,dire, arr[][]
avec 5 lignes et chaque ligne contient un nombre variable de colonnes?
éventuellement arr[5][]
avec la 1ère ligne arr[0][]
avec 4 colonnes
À la 2e rangée arr[1][]
avec 5 colonnes et ainsi de suite?
Je n'aurais pas l'esprit d'un vecteur STL solution mais je ne sais pas vecteurs très bien encore.
Les tableaux qui ont des dimensions variables dans une dimension sont appelés les tableaux irréguliers. Il existe de nombreux autres postes sur de SORTE à leur sujet. Ils fonctionnent bien pour certaines fins. Je ne suggérons de vous familiariser avec les vecteurs.
OriginalL'auteur user1484717 | 2012-07-18
Vous devez vous connecter pour publier un commentaire.
Avec C++11, vous pouvez le faire facilement avec des vecteurs (ligne bat ajouté pour des raisons de lisibilité):
Si vous n'avez pas de compilateur C++11, il fonctionne exactement de la même manière, mais vous ne serez pas en mesure de les initialiser comme facile. Vous pouvez définir les éléments individuellement:
Ou vous pouvez initialiser chaque "ligne" avec un tableau ordinaire:
Il n'est pas possible de faire ce que vous voulez avec des tableaux, depuis quand vous faites une
array[X][Y]
, il est automatiquement unX*Y
de la matrice. Vous pouvez, cependant, utiliser un tableau de pointeurs:et accéder à des éléments avec
array[X][Y]
. Cependant, le vecteur solution est beaucoup mieux en général.C++11 est la norme officielle du langage de programmation C++ maintenant, ce n'est pas une langue différente.
c'est un de ces subtilités, que les gens peuvent et vont argumenter. C'est presque comme à partir de C++ que le C++ est à partir de C. actuelles de la Plupart des compilateurs C++ ne le supporte pas. Le point de mon commentaire était de mentionner qu'il a fourni une solution de laquelle le demandeur aurait probablement pas de l'utiliser pour.
il n'est pas vraiment un vice de forme, la norme dit clairement (1.1 - [intro.champ d'application]):
This International Standard specifies requirements for implementations of the C++ programming language. The first such requirement is that they implement the language, and so this International Standard also defines C++.
Cependant, je tiens à vraiment ce n'est pas comme d'argumenter à ce sujet. J'ai essayé de fournir une réponse complète, mais il a fallu du temps et un couple de modifications. Parfois, il arrive que l'on ne prend pas en considération certaines choses tout de suite, et a pour modifier une réponse plus tard pour inclure des informations supplémentaires.Je sais, je le fais beaucoup.
OriginalL'auteur SingerOfTheFall
Vous pouvez le faire comme ceci (en supposant un tableau de
int
éléments):et cela vous donne un à deux dimensions allouée dynamiquement tableau de 5 par 4. Vous pouvez alors l'utiliser comme ceci:
arr[i][j] = 15;
Ne pas oublier de désallouer de la mémoire après vous avez terminé d'utiliser le tableau:
Je vous conseille d'utiliser
std::vector
, cependant. Vous pouvez voir les autres réponses pour référence.OriginalL'auteur Lyubomir Vasilev
Donc, 2D tableaux est
std::vector<std::vector<T>>
, oùT
est le type. Aussi, mostd::array<std::vector<int>, 5>
. Ou écrire votre propre tableau de la classe.OriginalL'auteur ForEveR