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>
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>
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!