Création de tableaux C ++
Pourquoi je ne peux pas faire quelque chose comme ceci:
int size = menu.size;
int list[size];
Est-il de toute façon autour de cette place de l'aide d'un vecteur? (les tableaux sont plus rapides, donc j'ai voulu utiliser des tableaux)
grâce
source d'informationauteur Danny
Vous devez vous connecter pour publier un commentaire.
La taille doit être connue à la compilation, car le compilateur a besoin de savoir combien espace de pile sera nécessaire d'allouer suffisamment de mémoire pour elle. (Edit: je corrige la position des mains. En C, tableaux de longueur variable peuvent être alloués sur la pile. C++ ne permet pas de longueur variable des tableaux, cependant.)
Mais, vous pouvez créer des tableaux sur le tas au moment de l'exécution:
Assurez-vous de libérer de la mémoire lorsque vous avez terminé, ou vous aurez une fuite de mémoire:
Noter qu'il est très facile de accidentellement créer des fuites de mémoire, et d'un vecteur est presque à coup sûr plus facile à utiliser et à entretenir. Les vecteurs sont assez rapide (surtout si vous
reserve()
à la bonne taille), et je recommande fortement d'utiliser un vector à la place de manuel de gestion de la mémoire.En général, c'est une bonne idée pour le profil de votre code pour trouver où sont les véritables goulots d'étranglement sont que de micro-optimiser à l'avant (parce que les optimisations ne sont pas toujours les optimisations).
Comme d'autres l'ont dit, le langage C++ les concepteurs ont choisi de ne pas permettre de longueur variable des tableaux, VLAs, en dépit d'eux étant disponible en C99. Toutefois, si vous êtes prêt à faire un peu plus de travail, et vous êtes tout simplement désespérée pour allouer de la mémoire sur la pile, vous pouvez utiliser
alloca()
.Cela dit, personnellement, je voudrais utiliser
std::vector
. Il est plus simple, plus sûr, plus facile à gérer et probablement assez vite.C++ ne permet pas de longueur variable des tableaux. La taille doit être connu au moment de la compilation. Si vous ne pouvez pas le faire.
Vous pouvez soit utiliser des vecteurs ou
new
.ou
Si vous y allez avec ce dernier, vous avez besoin de libérer plus tard:
Ce n'est pas vrai. Où avez-vous entendu cela?
En C++, la longueur d'un tableau doit être connue au moment de la compilation, afin d'allouer sur la pile.
Si vous avez besoin d'allouer un tableau dont la taille vous ne connaissez pas, au moment de la compilation, vous aurez besoin d'allouer sur le tas, à l'aide de
operator new[]
Mais puisque vous avez de nouveaux avais la mémoire sur le tas, vous devez vous assurer que vous avez correctement le supprimer lorsque vous avez terminé avec elle.
Autant que je sache, En C++03, il n'y a pas de longueur variable-tableaux (VLA):
vous voulez probablement faire ceci:
ou
tout d'abord, les vecteurs ne sont pas sensiblement plus rapide.
comme pour la raison pour laquelle vous ne pouvez pas faire quelque chose comme ceci:
le code allouer le tableau sur la pile. les compilateurs ont à connaître de cette taille l'avance afin qu'ils puissent en tenir compte. par conséquent, vous ne pouvez utiliser les constantes de cette syntaxe.
un moyen facile de contourner est de la création de la matrice sur le tas:
int list = new int[size];
N'oubliez pas dedelete[]
plus tard.Toutefois, si vous utilisez un vecteur et de la réserve de la taille correcte de l'avance + compiler avec l'optimisation, il devrait y avoir peu, absolument pas de frais généraux.
Depuis
list
est alloué sur la pile, sa taille doit être connu au moment de la compilation. Mais ici,size
n'est pas connu avant l'exécution, de sorte que la taille delist
n'est pas connu au moment de la compilation.