Rumah > pembangunan bahagian belakang > C++ > 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
Lepaskan: 2024-10-24 10:33:30
asal
1054 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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
Salin selepas log masuk

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!

sumber:php
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan