Menolak Elemen daripada Vektor Yang Sama: Amalan Selamat
Dalam pengaturcaraan, menggunakan vektor untuk menyimpan elemen ialah teknik asas. Walau bagaimanapun, adalah penting untuk memahami kemungkinan perangkap yang berkaitan dengan operasi pada vektor, terutamanya apabila bekerja dengan fungsi push_back.
Isu: Menolak Elemen daripada Vektor
Pertimbangkan coretan kod berikut:
<code class="cpp">vector<int> v; v.push_back(1); v.push_back(v[0]);</code>
Jika operasi tolak_balik kedua mencetuskan pengagihan semula vektor, rujukan kepada integer pertama (v[0]) menjadi tidak sah. Ini boleh membawa kepada tingkah laku yang tidak dijangka atau bahkan kesalahan pembahagian.
Penyelesaian: Menggunakan rizab untuk Mencegah Penempatan Semula
Untuk mengelakkan isu ini dan memastikan keselamatan menolak unsur-unsur yang sama vektor, fungsi rizab boleh digunakan. Dengan menempah kapasiti yang diperlukan terlebih dahulu, vektor boleh menampung elemen tambahan tanpa memerlukan pengagihan semula.
<code class="cpp">vector<int> v; v.push_back(1); v.reserve(v.size() + 1); v.push_back(v[0]);</code>
Dalam kod yang disemak ini, rizab dipanggil selepas elemen awal ditambahkan pada vektor. Ini memastikan bahawa vektor mempunyai kapasiti yang mencukupi untuk memegang semua elemen tanpa risiko pengagihan semula.
Perspektif Sejarah
Perlu diperhatikan bahawa kebimbangan mengenai operasi ini telah ditangani dalam piawaian C. Cadangan 526, yang menyasarkan situasi di mana parameter yang diambil oleh rujukan const boleh diubah suai semasa pelaksanaan fungsi, mempertimbangkan isu ini. Walau bagaimanapun, cadangan itu akhirnya membuat kesimpulan bahawa tingkah laku itu tidak dianggap sebagai kecacatan, kerana piawaian memerlukan operasi sisipan pada vektor untuk berfungsi dengan betul, tanpa mengira perubahan dalaman yang berpotensi.
Atas ialah kandungan terperinci Bolehkah Menolak Elemen dari Vektor yang Sama Mempengaruhi Rujukan Vektor?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!