Apabila melelaran melalui std::list, mengalih keluar elemen sambil mengekalkan lelaran yang sah boleh menjadi mencabar. Pertimbangkan kod berikut:
for (std::list<item*>::iterator i = items.begin(); i != items.end(); i++) { bool isActive = (*i)->update(); //if (!isActive) // items.remove(*i); //else other_code_involving(*i); } items.remove_if(CheckItemNotActive);
Menambah baris yang dikomentari untuk mengalih keluar item tidak aktif dengan serta-merta akan mengakibatkan ralat "Peulang senarai tidak boleh ditambah". Ini kerana mengalih keluar elemen tidak sah lelaran.
Untuk mengalih keluar item dengan cekap semasa lelaran, pertimbangkan pendekatan gelung sementara:
std::list<item*>::iterator i = items.begin(); while (i != items.end()) { bool isActive = (*i)->update(); if (!isActive) { items.erase(i++); // alternatively, i = items.erase(i); } else { other_code_involving(*i); ++i; } }
Kunci di sini adalah untuk menambah iterator sebelum mengalih keluar elemen. Sebagai alternatif, "i = items.erase(i)" boleh digunakan. Ini membolehkan penyingkiran unsur yang selamat dan cekap semasa berulang.
Atas ialah kandungan terperinci Bagaimana untuk Memadamkan Elemen dengan Selamat daripada senarai std::Semasa Lelaran?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!