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
Patricia Arquetteasal
2024-12-12 15:20:11641semak imbas

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

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(); ) { /* ... */ }

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!

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