Comment redimensionner le vecteur multidimensionnel telle que: par exemple, j'ai besoin d'une matrimonie [3] [5] [10]? P> P> P>
5 Réponses :
Vous devez redimensionner tout le vecteur imbriqué code> S par un. Utilisez
pour code> boucles ou récursions. P>
ok, tels que m_elements.Resize (3); pour (int i = 0; i <3; i ++) {tableau [i] .Resize (5); pour (int j = 0; j <5; j ++) {tableau [i] [j] .Resize (10); }}
@qutron: Oui ... simple comme ça. :-)
Vous n'avez pas besoin de faire celui-ci par un. Voir ma réponse.
@Matt: bon point - vous ne I> avez-vous besoin i> à, mais vous êtes probablement toujours Devrait i> - il est plus efficace que de créer une grande température temporaire, puis de la copie à plusieurs reprises, puis jetant de la construction l'absence .... Bravo.
@Tonyd j'ai un autre point. Lorsque nous redimensionnons un tableau déjà initialisé (pas pour la première fois), nous devons utiliser une boucle. Par exemple, envisagez un tableau [2] [2] code> qui doit être étendu à la taille de {3, 3},
redimensionnement (3, std :: vecteur
@CHAINRRO: Bon point ... pourrait valoir la peine de faire ce commentaire sur la réponse de Matt ...? À votre santé.
Je l'ai fait))
array.resize(3); for (int i = 0; i < 3; i++) { array[i].resize(5); for (int j = 0; j < 5; j++) { array[i][j].resize(10); } }
Ou `vecteur
Je ferais un conteneur personnalisé contenant un vecteur de vecteurs (de ... par dimension) et redimensionner avec des fonctions de redimensionnement par dimension. De cette façon, vous pouvez mettre l'invariant de la taille égale par dimension au même endroit. Le redimensionnement réel peut alors être fait dans une boucle en fonction de la dimension.
Il y aura un peu de travail pour faire du public ce qui doit être accédé (opérateur [], ...) p>
Voir aussi Boost.Multiarray < / p>
boost.MultiArray fournit une définition générique de concept de réseau N-dimensionnelle et des implémentations courantes de cette interface. code> p>
array.resize(3,vector<vector<custom_type> >(5,vector<custom_type>(10)));
Besoin de clarification: Quels sont exactement 3,5 et 10 ici ?? Vous redimensionnez-vous une VEC [5] [10] à VEC [3] [10] ??
@ aniliitb10 non; C'est l'exemple demandé par l'OP (veuillez consulter la question). Array code> est déjà en 3 dimensions. Il le redimensionne de tout ce qu'il était auparavant, à 3x5x10.
Il convient de mentionner que cela fonctionne que cela fonctionne pour le cas d'un vecteur vide, mais si votre vecteur a déjà des éléments, cela ne redimensionnera pas les éléments existants. Vous ne recevrez donc que les dimensions souhaitées exactes si vos éléments existants sont déjà des dimensions souhaitées ( Par exemple, cela ne permettra pas de redimensionner correctement un vecteur 2x2x2 existant ou un 10x10x10 vers le bas, mais fonctionnera pour un 1x5x10). Ceci est utile à mettre en place, mais pas nécessairement de "redimensionner" un vecteur multidimensionnel existant. Si vous avez besoin d'une taille exacte, std :: tableau code> peut être un meilleur choix si vous avez C ++ 11 ou plus tard disponible.