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. } }
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; } }
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!