Rumah >pembangunan bahagian belakang >C++ >Mengapa Memadamkan Elemen daripada Vektor dengan Iterator dan Menaikkannya dalam For Loop Menyebabkan Ranap?
Dalam coretan kod yang disediakan, gelung for menggunakan res.erase(it) untuk memadamkan elemen daripada vektor res, kemudian menambahnya dalam gelung yang sama. Walau bagaimanapun, ini membawa kepada kelakuan yang tidak dijangka dan ranap sistem.
Kod ini menggunakan lelaran vektor, yang menunjukkan kepada elemen semasa sedang diproses. Fungsi res.erase(it) memadamkan elemen yang ditunjuk olehnya dan mengembalikan iterator yang menunjuk ke elemen seterusnya dalam vektor. Dalam kod yang disediakan, gelung terus menggunakan lelaran yang dikembalikan ini, walaupun ia menunjuk ke penghujung vektor (.end()).
Iterators akses rawak, seperti yang digunakan di sini, tidak boleh bertambah melepasi penghujung jujukan yang dimilikinya. Oleh itu, penambahan .end() dalam gelung membawa kepada ranap sistem.
Untuk menyelesaikan isu ini, gelung for harus diubah suai untuk menggunakan gelung sementara dan bukannya bergantung pada kenaikan automatik yang disediakan oleh gelung for:
while (it != res.end()) { it = res.erase(it); }
Pendekatan ini memastikan bahawa gelung berterusan sehingga ia mencapai penghujung vektor, dan ia melangkau elemen yang dipadam dengan betul tanpa risiko ranap disebabkan kepada operasi kenaikan iterator tidak sah.
Atas ialah kandungan terperinci Mengapa Memadamkan Elemen daripada Vektor dengan Iterator dan Menaikkannya dalam For Loop Menyebabkan Ranap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!