Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Mengalih Keluar Elemen dengan Selamat daripada Peta C Semasa Lelaran?

Bagaimana untuk Mengalih Keluar Elemen dengan Selamat daripada Peta C Semasa Lelaran?

Patricia Arquette
Lepaskan: 2024-12-12 15:20:11
asal
641 orang telah melayarinya

How to Safely Remove Elements from a C   Map During Iteration?

Mengalih keluar Elemen daripada Peta Semasa Lelaran

Apabila melelaran melalui peta, pendekatan biasa ialah menggunakan gelung berasaskan julat. Walau bagaimanapun, mengubah suai peta semasa lelaran boleh membawa kepada tingkah laku yang tidak dijangka, kerana lelaran akan menjadi tidak sah.

Teknik yang disyorkan untuk mengalih keluar elemen daripada peta semasa mengulang dikenali sebagai "simpulan bahasa pemadam bekas bersekutu":

for (auto it = m.cbegin(); it != m.cend() /* not hoisted */; /* no increment */) {
  if (must_delete) {
    m.erase(it++);    // or "it = m.erase(it)" since C++11
  } else {
    ++it;
  }
}
Salin selepas log masuk

Idiom ini memastikan bahawa lelaran kekal sah selepas elemen dialih keluar dengan menggunakan penambahan awalan operator.

Ambil perhatian bahawa adalah penting untuk menggunakan gelung tradisional dan bukannya gelung berasaskan julat dalam kes ini, kerana mengubah suai bekas akan membatalkan lelaran bagi gelung berasaskan julat.

Sebelum C 11, adalah perlu untuk menggunakan jenis lelaran yang berasingan apabila melelaran melalui peta untuk mengalih keluar elemen:

for (std::map<K, V>::iterator it = m.begin(); it != m.end(); ) { /* ... */ }
Salin selepas log masuk

Dalam kedua-dua kes, memadamkan elemen tidak melanggar keteguhan elemen, kerana keteguhan dalam C tidak menjejaskan hayat objek.

Atas ialah kandungan terperinci Bagaimana untuk Mengalih Keluar Elemen dengan Selamat daripada Peta C Semasa Lelaran?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan