Rumah >pembangunan bahagian belakang >C++ >Bolehkah Kita Mengeluarkan Elemen daripada Vektor Di Dalam Julat C 11 Berasaskan Gelung?

Bolehkah Kita Mengeluarkan Elemen daripada Vektor Di Dalam Julat C 11 Berasaskan Gelung?

Barbara Streisand
Barbara Streisandasal
2024-12-06 01:32:09888semak imbas

Can We Remove Elements from a Vector Inside a C  11 Range-Based For Loop?

Mengalih keluar Elemen daripada Vektor dalam Gelung Berasaskan Julat C 11

Dalam C 11, berdasarkan julat untuk gelung menawarkan cara mudah untuk mengulang melalui elemen kontena. Walau bagaimanapun, mengalih keluar elemen daripada bekas dalam gelung ini menimbulkan cabaran.

Pertimbangkan kod berikut:

std::vector<IInventory*> inv;
inv.push_back(new Foo());
inv.push_back(new Bar());

for (IInventory* index : inv) {
    // Do some stuff
    // I need to remove this object from 'inv'...
}

Bolehkah Kami Mengalih Keluar Elemen Dalam Gelung Berasaskan Julat?

Tidak, anda tidak boleh mengalih keluar elemen daripada vektor dalam julat untuk gelung. Ini kerana gelung beroperasi dengan mencipta salinan lelaran vektor, yang menjadi tidak sah jika elemen dialih keluar atau ditambah.

Oleh itu, adalah penting untuk mempertimbangkan pendekatan alternatif untuk mengubah suai bekas semasa lelaran.

Penyelesaian Disyorkan

Pendekatan yang disyorkan ialah menggunakan gelung tradisional atau salah satu daripadanya varian. Ini membolehkan anda memanipulasi vektor secara langsung dan mengalih keluar elemen seperti yang diperlukan. Contohnya:

auto i = std::begin(inv);

while (i != std::end(inv)) {
    // Do some stuff
    if (blah)
        i = inv.erase(i);
    else
        ++i;
}

Atas ialah kandungan terperinci Bolehkah Kita Mengeluarkan Elemen daripada Vektor Di Dalam Julat C 11 Berasaskan Gelung?. 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