Tableau 3D C ++ utilisant l'opérateur int []
Je suis novice en C/C++ et j'ai été craquage de ma tête, mais encore obtenu aucune idée de comment faire une "structure" comme ce
Il est censé être en 3D, le tableau dynamique à l'aide de pointeurs.
J'ai commencé comme ça, mais j'étais coincé là-bas
int x=5,y=4,z=3;
int ***sec=new int **[x];
Il serait assez pour savoir comment faire pour une statique de la taille de y et z;
S'il vous plaît, j'apprécierais que vous m'aider.
Merci d'avance.
source d'informationauteur Marco Aviles
Vous devez vous connecter pour publier un commentaire.
De créer dynamiquement 3D tableau d'entiers, c'est mieux vous comprendre 1D et 2D de tableau en premier.
1D tableau: Vous pouvez le faire très facilement par
Ici, nous créons un int pointeur qui pointe vers une partie de la mémoire où les nombres entiers peuvent être stockées.
Tableau 2D: Vous pouvez utiliser la solution de ci-dessus 1D tableau pour créer un tableau 2D. Tout d'abord, créer un pointeur qui doit pointer vers un bloc de mémoire où seule autre entier les pointeurs sont des détenus qui, en définitive, pointez sur données réelles. Depuis notre premier pointeur vers un tableau de pointeurs, ce sera donc appelé pointeur de pointeur (double flèche).
Tableau 3D: C'est ce que vous voulez faire. Ici, vous pouvez essayer à la fois le mécanisme utilisé dans les deux cas ci-dessus. Appliquer la même logique que celle du tableau 2D. Diagramme en question explique tout. Le premier tableau-être un pointeur de pointeur de pointeur (int*** - puisqu'il pointe à double pointeurs). La solution est comme ci-dessous:
(ce qui est marqué, c++, après tout)
MODIFIER en réponse à Joe question
bonjour à nouveau Joe =) bien sûr. voici l'exemple:
Vous pouvez essayer:
Et une fois que vous avez terminé d'utiliser cette mémoire vous pouvez le désallouer:
Réponses complètes.
Si vous êtes vraiment écrit cela en C++ (pas rugueux C) je pense que vous devriez prendre un autre regard sur cette compliqué structure de données. OMI refonte tout en gardant à l'esprit ce que vous essayez de faire mieux.
Ce que vous essayez de faire est de ne pas idiomatiques en C++. Bien sûr, vous peut utiliser un
int***pointer
pour cela, mais cela est fortement déconseillé. En C++, nous avons de meilleurs moyens pour y arriver.Il en résultera quelque chose à la disposition de la mémoire similaire à ce que vous avez demandé. Il prend en charge un redimensionnement dynamique et intérieure des vecteurs de tailles différentes, tout comme dans votre image. En outre, vous ne devez pas vous inquiéter à propos du manuel d'allocation /suppression de tout. Aussi, les vecteurs de connaître leur taille, de sorte que vous n'avez pas à vous en souvenir, quelque part.
Mais si vous voulez juste un "rectangulaire" tableau 3D où tous les éléments sont consecutivly stockés dans le même bloc de mémoire, vous pouvez utiliser un boost::multiarray.
OK, permettez nous de vos débuts
sec est maintenant un tableau de int**s de longueur x, alors maintenant, je vais juste à se concentrer sur la fabrication de l'élément de zeroeth être ce que vous voulez
Maintenant s[0] points de tableau de int*s de longueur y, maintenant juste besoin d'obtenir le dernier morceau de l'arbre de fait, de sorte que
Et enfin de le rendre à la forme de votre diagramme
Cela ne semble un peu comme des devoirs à faire à la question, assurez-vous que vous comprenez effectivement la réponse et pourquoi il fonctionne.
Si c'est la réelle tableaux vous r'avoir des problèmes avec un coup d'oeil ici: Déclarer un pointeur de tableau multidimensionnel et d'allouer le tableau
Vous ne savez pas exactement ce que vous voulez, mais vous voudrez peut-être lire sur sur les listes chaînées.