Memadamkan Elemen daripada Senarai Menggunakan Lelaran Terbalik
Ada kemungkinan untuk menghadapi senario di mana anda ingin mengalih keluar elemen daripada senarai menggunakan lelaran terbalik, tetapi fungsi erase() hanya menerima lelaran biasa. Ini boleh menimbulkan cabaran, kerana menukar lelaran terbalik kepada lelaran biasa bukanlah mudah.
Penyelesaian:
Kunci untuk menyelesaikan isu ini terletak pada memahami perhubungan antara lelaran terbalik dan lelaran asasnya. Menurut Piawaian C, lelaran asas bagi lelaran terbalik i ialah &*(i - 1). Ini bermakna untuk mendapatkan lelaran asas, kami mengurangkan i.
Contoh:
Pertimbangkan coretan kod berikut:
for ( std::list< Cursor::Enum & >::reverse_iterator i = m_CursorStack.rbegin(); i != m_CursorStack.rend(); ++i ) { if ( *i == pCursor ) { m_CursorStack.erase( --(i.base()) ); break; } }
Dalam ini contoh, iterator asas diperoleh dengan mengurangkan i.base(). Dengan menghantar lelaran asas ini kepada fungsi erase(), kita boleh berjaya mengalih keluar elemen yang dikehendaki daripada senarai.
Penyelesaian C 11:
Untuk C 11 dan kemudiannya , dua penyelesaian tambahan tersedia:
m_CursorStack.erase( std::next(i).base() );
Penyelesaian ini kekal tidak berubah, manakala std::next() digunakan untuk memajukan lelaran terbalik satu kedudukan ke hadapan, dengan berkesan mendapatkan semula lelaran asasnya .
std::advance(i, 1); m_CursorStack.erase( i.base() );
Dalam penyelesaian ini, iterator terbalik memajukan satu kedudukan menggunakan std::advance(), yang secara berkesan menjajarkan lelaran asasnya dengan elemen yang diingini untuk pemadaman.
Mana-mana penyelesaian yang anda pilih, pendekatan ini menyediakan kaedah yang bersih dan mudah untuk memadamkan elemen daripada senarai menggunakan kaedah terbalik iterator.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memadamkan Elemen daripada Senarai Menggunakan Lelaran Terbalik dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!