Rumah > pembangunan bahagian belakang > C++ > Adakah Rizab Memastikan Kesahihan Rujukan Vektor Semasa Memasukkan Elemen?

Adakah Rizab Memastikan Kesahihan Rujukan Vektor Semasa Memasukkan Elemen?

Linda Hamilton
Lepaskan: 2024-10-24 10:02:30
asal
856 orang telah melayarinya

Does Reserve Ensure the Validity of Vector References During Element Insertion?

Menolak Elemen daripada Vektor yang Sama

Dalam operasi vektor tertentu, seperti push_back, kapasiti dalaman mungkin perlu diagihkan semula. Ini boleh menimbulkan kebimbangan tentang kesahihan rujukan kepada elemen sebelumnya dalam vektor.

Satu kebimbangan sedemikian timbul apabila menolak elemen daripada vektor yang sama ke dalam dirinya:

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

Selepas tolak_balik kedua operasi, ada kemungkinan bahawa peruntukan memori vektor telah ditukar, menjadikan rujukan kepada integer pertama (iaitu, v[0]) tidak sah.

Sebagai alternatif, pertimbangkan kod berikut:

<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

Dengan memanggil rizab sebelum push_back kedua, kami memastikan bahawa vektor mempunyai kapasiti yang mencukupi untuk menampung elemen baharu tanpa memperuntukkan semula. Ini menjamin bahawa rujukan kepada integer pertama kekal sah walaupun selepas operasi.

Berdasarkan resolusi yang dicadangkan kepada laporan kecacatan LWG 526, difahamkan bahawa contoh kod pertama adalah sah kerana vektor::push_back diperlukan untuk bekerja dalam senario sedemikian. Walau bagaimanapun, untuk mengekalkan kesahihan rujukan kepada elemen terdahulu, adalah bijak untuk menggunakan kaedah rizab atau alternatif untuk mengelakkan pengagihan semula yang berpotensi.

Atas ialah kandungan terperinci Adakah Rizab Memastikan Kesahihan Rujukan Vektor Semasa Memasukkan Elemen?. 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