Pousser des éléments du même vecteur : mesures de sécurité
La sécurité de repousser un élément du même vecteur dépend du potentiel de réaffectation , ce qui peut invalider les références aux éléments vectoriels existants. Ce problème se pose dans l'exemple suivant :
<code class="cpp">vector<int> v; v.push_back(1); v.push_back(v[0]);</code>
Si le deuxième push_back déclenche une réallocation, la référence à v[0] devient invalide. Pour résoudre ce problème, l'approche suivante peut être utilisée :
<code class="cpp">vector<int> v; v.push_back(1); v.reserve(v.size() + 1); v.push_back(v[0]);</code>
En appelant reserve, nous demandons explicitement suffisamment de mémoire, garantissant qu'aucune réallocation ne se produit lors des insertions ultérieures.
Selon la norme C , le comportement de push_back par rapport aux références d'éléments n'est pas explicitement défini comme un défaut, même s'il pourrait potentiellement conduire à des références invalides. En effet, la norme exige que vector::insert fonctionne correctement, même lorsque l'insertion modifie la position d'autres éléments.
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!