Dalam C , kelas terbina dalam std::list ialah senarai berkait dua kali, menyediakan pemasukan dan penyingkiran elemen yang cekap. Walau bagaimanapun, apabila cuba mengubah suai senarai semasa lelaran, adalah penting untuk mendekati operasi dengan berhati-hati.
Masalah: Ralat berlaku semasa menyemak status aktiviti item dalam std:: menyenaraikan dan cuba mengalih keluar item tidak aktif dengan serta-merta. Ralat "List iterator not incrementable" ditemui semasa cuba mengalihkan iterator selepas mengalih keluar elemen.
Penyelesaian: Kunci untuk berjaya mengalih keluar elemen semasa lelaran ialah menggunakan pengubahsuaian pada iterator dahulu, sebelum melakukan penyingkiran. Daripada cuba menambah lelaran dan kemudian mengalih keluar elemen, adalah lebih sesuai untuk menstruktur semula gelung sebagai gelung sementara, membenarkan lelaran ditambah dalam gelung itu sendiri. Oleh itu, kod yang dikemas kini di bawah menunjukkan pendekatan yang betul:
std::list<item*>::iterator i = items.begin(); while (i != items.end()) { bool isActive = (*i)->update(); if (!isActive) { i = items.erase(i); // alternatively, i = items.erase(i++); } else { other_code_involving(*i); ++i; } }
Kod yang disemak ini memastikan bahawa lelaran dinaikkan dengan betul sebelum melaksanakan penyingkiran elemen, sekali gus mengelakkan ralat dan membolehkan penyingkiran elemen tidak aktif yang cekap semasa mengulang melalui senarai.
Atas ialah kandungan terperinci Bagaimana untuk Mengalih Keluar Elemen dengan Selamat daripada `std::list` Semasa Mengulang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!