0
votes

comportement étrange lorsque les éléments vectoriels sont définis à l'aide de l'indexation

essayer de copier tous les éléments d'un vecteur à un autre à l'aide d'indexation comme indiqué dans l'extrait de code. Pour autant que je sache, régler / obtenir un élément de vecteur en utilisant Index (je suis au courant de "à" et ses avantages) est autorisé dans C ++ .

Si je définis un élément dans vecteur A à l'aide de l'index, cela fonctionne comme prévu. Pour Vecteur B également, si push_back est utilisé, cela fonctionne comme prévu. xxx

Je trouve qu'il est difficile de comprendre ce comportement de Vecteur .

Remarque: Je sais que ce n'est pas une manière suggérée de copier vecteur car nous avons plusieurs autres options qui sont pratiques et efficaces.

sortie: xxx


1 commentaires

Voter pour fermer comme une faute de frappe. Vous avez besoin redimensionner , pas réserve pour B.Reserve (A.Size ());


3 Réponses :


2
votes

std :: vecteur :: réserve ne crée pas réellement aucun élément, il ne se réserve que la mémoire, donc lors de l'utilisation de push_back ou emplace_back < / code>, vecteur ne doit pas réaffecter la mémoire pour créer de la place pour plus d'éléments.

Si vous souhaitez construire les objets, au lieu de réserver la mémoire pour eux, utilisez std :: vecteur :: redimensionner


0 commentaires

2
votes

std :: vecteur :: réserve () n'est pas le même que std :: vecteur :: redized () .

b.Reserve (A.Size ()) ne change pas la taille de la taille B . Vous devrez utiliser b.Resize (A.Size ()) pour cela.


xxx

ou créer b avec la bonne taille pour commencer. xxx


0 commentaires

1
votes

Vous avez un comportement non défini à xxx

b [i] n'existe pas, vous accédez donc au vecteur hors limites car sa taille est 0. < / p>


0 commentaires