Bagaimana untuk Memadamkan Elemen dengan Selamat daripada Bekas STL Menggunakan Lelaran Terbalik?

Patricia Arquette
Lepaskan: 2024-11-23 05:00:09
asal
394 orang telah melayarinya

How to Safely Erase Elements from an STL Container Using a Reverse Iterator?

Mengalih keluar Elemen Menggunakan Lelaran Terbalik

Apabila bekerja dengan bekas STL, memadamkan elemen menggunakan lelaran terbalik boleh menimbulkan cabaran. Secara lalai, fungsi pemadaman mengharapkan lelaran, bukan lelaran terbalik.

Untuk menyelesaikan isu ini, terdapat beberapa pendekatan:

1. Mendapatkan Lelaran Asas:

Standard mentakrifkan hubungan antara lelaran terbalik (i) dan lelaran asasnya yang sepadan (i.base()) sebagai &*(reverse_iterator(i)) == & *(i - 1). Ini bermakna anda boleh mendapatkan iterator asas dengan menggunakan --() pada i.base().

2. Penyelesaian Khusus C 11:

Dalam C 11, anda mempunyai dua pilihan tambahan:

  • std::next(i).base(): Ini akan mengembalikan iterator asas yang sepadan dengan elemen seterusnya dalam jujukan.
  • std::advance(i, 1); i.base(): Ini akan memajukan lelaran terbalik dengan satu dan mengembalikan lelaran asas sepadan dengan kedudukan semasanya.

Kod Contoh:

for (std::list<Cursor::Enum>::reverse_iterator i = m_CursorStack.rbegin(); i != m_CursorStack.rend(); ++i) {
  if (*i == pCursor) {
    // C++11 solution
    m_CursorStack.erase(std::next(i).base());

    // Alternatively, for pre-C++11 or if desired:
    m_CursorStack.erase(--(i.base()));
    break;
  }
}
Salin selepas log masuk

Dengan mengikuti pendekatan ini, anda boleh memadamkan elemen dengan berkesan daripada senarai menggunakan lelaran terbalik sambil mematuhi standard keperluan.

Atas ialah kandungan terperinci Bagaimana untuk Memadamkan Elemen dengan Selamat daripada Bekas STL Menggunakan Lelaran Terbalik?. 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