Memadamkan Elemen Senarai Menggunakan Leulang Terbalik
Dalam C , fungsi pemadaman dalam bekas std::list mengharapkan parameter lelaran. Walau bagaimanapun, anda mungkin menghadapi situasi di mana anda perlu mengalih keluar elemen menggunakan lelaran terbalik (std::list::reverse_iterator).
Penyelesaian:
Mengikut standard C, perhubungan berikut wujud antara lelaran terbalik i dan lelaran asasnya i.base():
&*(reverse_iterator(i)) == &*(i - 1)
Ini bermakna lelaran terbalik menghala ke elemen sejurus selepas elemen yang ditunjuk oleh lelaran asasnya.
Untuk memadamkan elemen menggunakan lelaran terbalik , anda perlu menggunakan offset untuk mendapatkan lelaran asas:
m_CursorStack.erase(--(i.base()));
Ungkapan ini berkesan mengurangkan lelaran asas dengan satu, dengan itu menunjuk ke elemen yang akan dipadamkan.
Penyelesaian Tambahan (C 11 dan Kemudian):
m_CursorStack.erase(std::next(i).base());
std::advance(i, 1); m_CursorStack.erase(i.base());
Penyelesaian ini lebih ringkas dan lebih jelas daripada pendekatan asal. Pilih yang paling sesuai dengan keperluan anda.
Atas ialah kandungan terperinci Bagaimana untuk Memadamkan Elemen daripada C `std::list` Menggunakan Reverse Iterator?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!