Penyingkiran Elemen yang Cekap daripada std::vector Semasa Lelaran
Soalan:
Bagaimanakah seseorang boleh mengalih keluar elemen secara cekap daripada std::vector sambil melelaran ke atasnya tanpa membatalkan iterator sedia ada? Pertimbangkan senario berikut:
<code class="cpp">std::vector<std::string> m_vPaths; for (auto iter = m_vPaths.begin(); iter != m_vPaths.end(); iter++) { if (::DeleteFile(iter->c_str())) { m_vPaths.erase(iter); // Invalidates remaining iterators } }</code>
Jawapan:
Kaedah erase() yang disediakan oleh std::vector membatalkan iterator. Untuk mengelakkan isu ini, seseorang boleh menggunakan nilai pulangan erase() yang menunjukkan kepada lelaran yang sah seterusnya:
<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); // Sets iter to next valid element else ++iter; }</code>
Atas ialah kandungan terperinci Bagaimana untuk Mengalih Keluar Elemen daripada `std::vector` Semasa Lelaran Tanpa Membatalkan Lelaran?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!