Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Memadam Elemen Peta Dengan Selamat Semasa Mengulang dalam C?

Bagaimana untuk Memadam Elemen Peta Dengan Selamat Semasa Mengulang dalam C?

DDD
Lepaskan: 2024-12-22 21:22:11
asal
903 orang telah melayarinya

How to Safely Erase Map Elements While Iterating in C  ?

Potensi Perangkap Apabila Memadam Elemen Peta Semasa Lelaran

Apabila memanipulasi peta dalam C , adalah penting untuk mempertimbangkan akibat pemadaman elemen semasa melelaran melalui mereka. Soalan ini meneroka isu yang berpotensi dan menyediakan penyelesaian untuk kedua-dua C 03 dan C 11.

C 03 Pertimbangan

Dalam C 03, memadam elemen daripada peta tidak secara automatik membatalkan semua iterator dalam peta. Walau bagaimanapun, ia tidak sah iterator yang menunjuk kepada elemen yang dipadamkan. Untuk lelaran dengan selamat melalui peta dan memadamkan elemen semasa lelaran, anda perlu menambah lelaran sebelum memanggil padam. Berikut ialah versi terkini kod yang disediakan dalam soalan:

map<string, SerialdMsg::SerialFunction_t><string, SerialdMsg::SerialFunction_t>::iterator pm_it = port_map.begin();
while (pm_it != port_map.end()) {
    if (pm_it->second == delete_this_id) {
        port_map.erase(pm_it++);  // Use post-increment to get the updated iterator.
    } else {
        ++pm_it;  // Can use pre-increment for efficiency.
    }
}
Salin selepas log masuk

Penambahan C 11

Dalam C 11, kaedah erase() telah dipertingkatkan dengan ketara. Ia kini mengembalikan iterator yang menunjuk ke elemen seterusnya dalam peta, menjadikannya selamat untuk memadamkan elemen semasa lelaran tanpa membatalkan lelaran lain. Kod yang dikemas kini menggunakan C 11 ialah:

auto pm_it = port_map.begin();
while (pm_it != port_map.end()) {
    if (pm_it->second == delete_this_id) {
        pm_it = port_map.erase(pm_it);
    } else {
        ++pm_it;
    }
}
Salin selepas log masuk

Teknik Mark Ransom

Teknik Mark Ransom ialah satu lagi pilihan dalam C 03 untuk memadamkan elemen peta dengan selamat semasa lelaran . Ia melibatkan penciptaan vektor sementara untuk menyimpan kunci elemen yang akan dipadamkan dan kemudian memadamkannya dalam gelung kedua.

Kesimpulannya, apabila memadamkan elemen daripada peta semasa lelaran dalam C , ambil kira potensi pembatalan iterator dan gunakan pendekatan yang sesuai bergantung pada versi C yang anda gunakan. Ingat untuk sentiasa menambah lelaran sebelum memadamkan elemen untuk mengekalkan konsistensi dan mengelakkan tingkah laku yang tidak dijangka.

Atas ialah kandungan terperinci Bagaimana untuk Memadam Elemen Peta Dengan Selamat Semasa Mengulang dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan