Maison > développement back-end > C++ > le corps du texte

Lors de la transmission d'éléments à partir du même vecteur, est-il sûr de s'appuyer sur la référence d'origine ?

Mary-Kate Olsen
Libérer: 2024-10-24 10:33:30
original
981 Les gens l'ont consulté

When Pushing Elements from the Same Vector, Is it Safe to Rely on the Original Reference?

Repousser des éléments du même vecteur : une mise en garde

Dans cette discussion, nous étudions les pièges potentiels associés au refoulement d'un élément du même vecteur et explorons techniques pour assurer sa sécurité.

Dangers potentiels

Considérez l'extrait de code suivant :

<code class="cpp">vector<int> v;
v.push_back(1);
v.push_back(v[0]);</code>
Copier après la connexion

La deuxième opération push_back peut réaffecter le vecteur, invalidant la référence au premier élément. Par conséquent, cette approche est généralement considérée comme dangereuse.

Approche sûre

Pour garantir la sécurité de telles opérations, nous pouvons utiliser la méthode de réserve pour allouer suffisamment d'espace à l'avance :

<code class="cpp">vector<int> v;
v.push_back(1);
v.reserve(v.size() + 1);
v.push_back(v[0]);</code>
Copier après la connexion

Conformité à la norme

Le comportement décrit ci-dessus a été traité dans la norme C (ou un problème similaire) :

1) Parameters taken by const reference can be changed during execution of the function
Examples:
Given std::vector v:
v.insert(v.begin(), v[2]);
v[2] can be changed by moving elements of vector
Copier après la connexion

Cependant, ce problème n'a pas été considéré comme un défaut, car il est de la responsabilité du vecteur d'assurer la fonctionnalité même lorsque son contenu est modifié.

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!

source:php
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!