Maison >développement back-end >C++ >Comment assurer la sécurité lors de la poussée d'éléments à partir du même vecteur ?

Comment assurer la sécurité lors de la poussée d'éléments à partir du même vecteur ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-26 11:17:30659parcourir

How to Ensure Safety When Pushing Elements from the Same Vector?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn