Maison  >  Article  >  développement back-end  >  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 ?

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
Mary-Kate Olsenoriginal
2024-10-24 10:33:30983parcourir

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>

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>

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

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!

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