Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mengeluarkan Elemen dengan Selamat daripada std::vector Semasa Memulas?

Bagaimana untuk Mengeluarkan Elemen dengan Selamat daripada std::vector Semasa Memulas?

Patricia Arquette
Patricia Arquetteasal
2024-11-02 02:52:30361semak imbas

How to Safely Remove Elements from a std::vector While Iterating?

Mengalih keluar Elemen secara berkesan daripada std::vector Sambil Mengulang

Dalam bidang pengaturcaraan C, pembangun sering menghadapi cabaran untuk memanipulasi std ::vektor semasa merentasi unsur-unsurnya. Walaupun iterator menyediakan mekanisme yang mudah untuk tugas ini, perangkap biasa timbul apabila cuba mengalih keluar elemen semasa lelaran.

Pertimbangkan senario di mana std::vector digunakan untuk menyimpan senarai laluan ke fail. Matlamatnya adalah untuk memadam setiap fail dan mengalih keluar laluannya daripada vektor. Walau bagaimanapun, menggunakan kaedah tradisional, seperti kaedah erase(), membatalkan iterator selepas setiap pemadaman, merumitkan perjalanan selanjutnya.

Untuk mengatasi had ini, pembangun telah mencipta pendekatan yang lebih cekap. Kaedah erase(), apabila digunakan, bukan sahaja mengalih keluar elemen yang ditetapkan tetapi juga mengembalikan iterator baharu yang menunjuk ke elemen seterusnya. Tingkah laku unik ini membolehkan kesinambungan gelung yang lancar:

<code class="cpp">std::vector<std::string>::iterator iter;
for (iter = m_vPaths.begin(); iter != m_vPaths.end(); ) {
    if (::DeleteFile(iter->c_str()))
        iter = m_vPaths.erase(iter);
    else
        ++iter;
}</code>

Dalam coretan kod ini, gelung diteruskan seperti yang dimaksudkan, dengan iter dikemas kini secara automatik untuk menghala ke elemen sah seterusnya selepas setiap pemadaman. Kaedah cekap ini menghapuskan keperluan untuk vektor tambahan dan menyelaraskan proses mengalih keluar elemen semasa lelaran.

Atas ialah kandungan terperinci Bagaimana untuk Mengeluarkan Elemen dengan Selamat daripada std::vector Semasa Memulas?. 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