Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Memadamkan Elemen daripada Senarai Menggunakan Lelaran Terbalik dalam C?

Bagaimanakah Saya Boleh Memadamkan Elemen daripada Senarai Menggunakan Lelaran Terbalik dalam C?

Barbara Streisand
Lepaskan: 2024-11-30 18:55:14
asal
532 orang telah melayarinya

How Can I Erase an Element from a List Using a Reverse Iterator in C  ?

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;
    }
}
Salin selepas log masuk

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:

  1. Menggunakan std::next():
m_CursorStack.erase( std::next(i).base() );
Salin selepas log masuk

Penyelesaian ini kekal tidak berubah, manakala std::next() digunakan untuk memajukan lelaran terbalik satu kedudukan ke hadapan, dengan berkesan mendapatkan semula lelaran asasnya .

  1. Memajukan Songsang Iterator:
std::advance(i, 1);
m_CursorStack.erase( i.base() );
Salin selepas log masuk

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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan