Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mengalih Keluar Elemen dengan Selamat daripada `std::list` Semasa Mengulang?

Bagaimana untuk Mengalih Keluar Elemen dengan Selamat daripada `std::list` Semasa Mengulang?

Linda Hamilton
Linda Hamiltonasal
2024-12-20 13:01:21486semak imbas

How to Safely Remove Elements from an `std::list` While Iterating?

Bolehkah anda mengalih keluar elemen daripada std::list semasa melelakan melaluinya sambil melelaran melaluinya?

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!

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