Maison >développement back-end >C++ >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 ?
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!