Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mengalih Keluar Elemen dengan Selamat daripada Peta C Semasa Lelaran?

Bagaimanakah Saya Boleh Mengalih Keluar Elemen dengan Selamat daripada Peta C Semasa Lelaran?

Barbara Streisand
Barbara Streisandasal
2024-12-09 13:52:14313semak imbas

How Can I Safely Remove Elements from a C   Map During Iteration?

Mengalih keluar Elemen daripada Peta Semasa Lelaran

Dalam C , melelaran pada peta perpustakaan standard sambil mengalih keluar elemen boleh mencabar, seperti menggunakan padam () membatalkan iterator. Walau bagaimanapun, terdapat simpulan bahasa yang diterima secara meluas untuk menangani isu ini:

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

Begini cara simpulan bahasa ini berfungsi:

  • Tiada angkat: Kami tidak angkat pengendali kenaikan di luar keadaan gelung. Ini adalah kritikal, kerana pengangkatan akan menyebabkan lelaran untuk maju walaupun elemen dialih keluar, berpotensi membawa kepada tingkah laku yang tidak ditentukan.
  • Meningkat dengan selamat: Dalam gelung, pengendali kenaikan hanya digunakan selepas menyemak sama ada elemen itu tidak sepatutnya dialih keluar.
  • Caching iterator seterusnya (C 11 atau kemudian): Apabila elemen dialih keluar, kami cache iterator ke elemen seterusnya sebelum memadam. Ini membolehkan kami meneruskan lelaran dengan lancar tanpa mengganggu urutan lelaran.

Sintaksis Pra-C 11:

Sebelum C 11, memadamkan const iterator memerlukan sedikit berbeza sintaks:

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

Constness dan Pembuangan:

Memadamkan elemen daripada peta tidak melanggar keteguhan elemen, sama seperti memadamkan penunjuk ke- tetap. Constness terutamanya mengekang keupayaan untuk mengubah suai nilai, bukan sepanjang hayatnya.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh 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