9
votes

redimensionner le vecteur multidimensionnel

Comment redimensionner le vecteur multidimensionnel telle que: xxx

par exemple, j'ai besoin d'une matrimonie [3] [5] [10]?


0 commentaires

5 Réponses :


4
votes

Vous devez redimensionner tout le vecteur imbriqué S par un. Utilisez pour boucles ou récursions.


6 commentaires

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 avez-vous besoin à, mais vous êtes probablement toujours Devrait - 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] qui doit être étendu à la taille de {3, 3}, redimensionnement (3, std :: vecteur (3 ))) ne fonctionne pas.


@CHAINRRO: Bon point ... pourrait valoir la peine de faire ce commentaire sur la réponse de Matt ...? À votre santé.



6
votes

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);
    }
}


1 commentaires

Ou `vecteur >>> (3, vecteur > (5, vecteur (10));



2
votes

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 [], ...)


0 commentaires

5
votes

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.


0 commentaires

17
votes
array.resize(3,vector<vector<custom_type> >(5,vector<custom_type>(10)));

3 commentaires

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 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 peut être un meilleur choix si vous avez C ++ 11 ou plus tard disponible.