Pousser un élément à partir du même vecteur
Dans certaines opérations vectorielles, telles que push_back, la capacité interne peut devoir être réaffectée. Cela peut soulever des inquiétudes quant à la validité des références aux éléments précédents du vecteur.
Une de ces inquiétudes survient lorsque l'on pousse un élément du même vecteur vers lui-même :
<code class="cpp">vector<int> v; v.push_back(1); v.push_back(v[0]);</code>
Après le deuxième push_back opération, il est possible que l'allocation de mémoire du vecteur ait été modifiée, rendant la référence au premier entier (c'est-à-dire v[0]) invalide.
Vous pouvez également considérer le code suivant :
<code class="cpp">vector<int> v; v.push_back(1); v.reserve(v.size() + 1); v.push_back(v[0]);</code>
En appelant reserve avant le deuxième push_back, nous nous assurons que le vecteur a une capacité suffisante pour accueillir le nouvel élément sans réallocation. Cela garantit que la référence au premier entier reste valide même après l'opération.
Sur la base de la résolution proposée pour le rapport de défaut LWG 526, il est entendu que le premier exemple de code est valide car vector::push_back est requis travailler dans de tels scénarios. Cependant, pour maintenir la validité des références aux éléments précédents, il est prudent d'utiliser des méthodes de réserve ou alternatives pour éviter d'éventuelles réallocations.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!