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
Lepaskan: 2024-12-09 13:52:14
asal
327 orang telah melayarinya

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;
  }
}
Salin selepas log masuk

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

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!

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