Rumah >pembangunan bahagian belakang >C++ >Bagaimana dengan Cekap Memadam Elemen daripada Vektor Semasa Lelaran Tanpa Membatalkan Iterator?
Apabila melelaran melalui vektor, elemen yang memenuhi kriteria tertentu mungkin diperlukan. Walau bagaimanapun, penyingkiran terus boleh membatalkan lelaran yang digunakan untuk gelung. Artikel ini menyediakan penyelesaian untuk memadamkan elemen dengan cekap tanpa menggunakan kaedah v[i].
Mengekalkan Iterator Selepas Padam
Kaedah erase() mengembalikan lelaran baharu menunjuk ke elemen selepas elemen yang dikeluarkan. Ini membolehkan lelaran berterusan dengan mengemas kini keadaan gelung:
<code class="cpp">for(iterator it = begin; it != end(container); it = vec.erase(it)) { if (it->somecondition()) { it = vec.erase(it); } }</code>
Menggabungkan remove_if dan padam
Untuk mengoptimumkan proses penyingkiran, pertimbangkan untuk menggunakan std::remove_if dan padam bersama-sama:
<code class="cpp">iterator it = std::remove_if(begin, end, pred); vec.erase(it, vec.end());</code>
Pendekatan ini memisahkan penyingkiran elemen yang layak daripada penyingkiran sebenar mereka, menghasilkan operasi O(N) yang lebih pantas.
Contoh dengan Pembuangan Berasaskan Templat
Untuk menyamaratakan proses penyingkiran, gunakan predikat berasaskan templat dan kelas remove_by_caller:
<code class="cpp">class remove_by_caller { public: remove_by_caller(AguiWidgetBase* pWidget) : mWidget(pWidget) {} template <typename T> bool operator()(const T& pX) const { return pX.getCaller() == mWidget; } private: AguiWidgetBase* mWidget; }; std::vector<AguiTimedEvent>::iterator it = std::remove_if(timedEvents.begin(), timedEvents.end(), remove_by_caller(widget)); timedEvents.erase(it, timedEvents.end());</code>
Melalui pendekatan ini, adalah mungkin untuk memadamkan elemen secara cekap daripada vektor sambil mengekalkan lelaran.
Atas ialah kandungan terperinci Bagaimana dengan Cekap Memadam Elemen daripada Vektor Semasa Lelaran Tanpa Membatalkan Iterator?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!