Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Mengeluarkan Elemen dengan Cekap dari std::vector Semasa Lelaran?

Bagaimana untuk Mengeluarkan Elemen dengan Cekap dari std::vector Semasa Lelaran?

DDD
Lepaskan: 2024-10-29 13:32:29
asal
945 orang telah melayarinya

How to Efficiently Remove Elements from a std::vector During Iteration?

Mengalih keluar Elemen dengan cekap daripada std::vector Semasa Lelaran

Apabila melelaran pada std::vector dan melakukan tindakan yang memerlukan pengubahsuaian saiz vektor, seperti memadam elemen, anda mungkin menghadapi isu ketidaksahihan iterator. Ini kerana kaedah erase() yang digunakan untuk mengalih keluar elemen mengubah saiz vektor dan membatalkan semua iterator yang sedia ada.

Mengelakkan Lelaran Tidak Sah

Untuk mengatasinya, penyelesaian yang cekap ialah menggunakan nilai pulangan daripada kaedah erase(), yang menyediakan lelaran baharu yang sah menunjuk kepada elemen serta-merta selepas yang dipadamkan. Ini membolehkan anda meneruskan lelaran tanpa perlu risau tentang iterator yang tidak sah.

Kod berikut menunjukkan pendekatan ini:

<code class="cpp">std::vector<std::string>::iterator iter;
for (iter = m_vPaths.begin(); iter != m_vPaths.end(); ) {
    if (::DeleteFile(iter->c_str())) {
        iter = m_vPaths.erase(iter);  // Returns a new valid iterator
    } else {
        ++iter;  // Advance iterator if file deletion failed
    }
}</code>
Salin selepas log masuk

Dalam kod ini, iterator iter dikemas kini untuk menunjuk ke elemen seterusnya selepas setiap pemadaman fail yang berjaya, membolehkan lelaran diteruskan dengan lancar.

Struktur Data Alternatif

Walaupun menggunakan pendekatan iterator adalah cekap, ia masih mengubah suai vektor m_vPaths asal, yang mungkin mempunyai prestasi implikasi jika anda perlu membuat beberapa pemadaman. Dalam kes sedemikian, mungkin lebih baik untuk mempertimbangkan menggunakan struktur data alternatif yang dioptimumkan untuk memadamkan elemen dengan cekap, seperti:

  • std::list: Pautan berganda senarai yang membolehkan penyingkiran elemen yang cekap dalam kerumitan masa O(1).
  • std::set: Set tersusun yang secara automatik mengalih keluar elemen pendua dan menyokong operasi penyingkiran yang cekap.
  • std::unordered_set: Set tidak tertib yang turut menyokong penyingkiran elemen yang cekap, tetapi penting untuk ambil perhatian bahawa tertib lelaran tidak dijamin.

Atas ialah kandungan terperinci Bagaimana untuk Mengeluarkan Elemen dengan Cekap dari std::vector 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan