Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Apabila Menolak Elemen dari Vektor yang Sama, Adakah Selamat Bergantung pada Rujukan Asal?

Apabila Menolak Elemen dari Vektor yang Sama, Adakah Selamat Bergantung pada Rujukan Asal?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-24 10:33:30983semak imbas

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

Menolak Elemen dari Vektor yang Sama: Kisah Berhati-hati

Dalam perbincangan ini, kami menyiasat kemungkinan perangkap yang berkaitan dengan menolak elemen kembali daripada vektor yang sama dan meneroka teknik untuk memastikan keselamatannya.

Potensi Bahaya

Pertimbangkan coretan kod berikut:

<code class="cpp">vector<int> v;
v.push_back(1);
v.push_back(v[0]);</code>

Operasi tolak_balik kedua mungkin mengalokasikan semula vektor, membatalkan rujukan kepada elemen pertama. Oleh itu, pendekatan ini secara amnya dianggap tidak selamat.

Pendekatan Selamat

Untuk memastikan keselamatan operasi sedemikian, kami boleh menggunakan kaedah rizab untuk memperuntukkan ruang yang mencukupi terlebih dahulu:

<code class="cpp">vector<int> v;
v.push_back(1);
v.reserve(v.size() + 1);
v.push_back(v[0]);</code>

Keakuran Standard

Tingkah laku yang diterangkan di atas telah ditangani dalam standard C (atau isu yang serupa):

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

Walau bagaimanapun, isu ini tidak dianggap sebagai kecacatan, kerana menjadi tanggungjawab vektor untuk memastikan kefungsian walaupun kandungannya diubah suai.

Atas ialah kandungan terperinci Apabila Menolak Elemen dari Vektor yang Sama, Adakah Selamat Bergantung pada Rujukan Asal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn