Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Mengeluarkan Elemen dengan Selamat daripada Vektor Semasa Lelaran dalam C?

Bagaimana untuk Mengeluarkan Elemen dengan Selamat daripada Vektor Semasa Lelaran dalam C?

Barbara Streisand
Lepaskan: 2024-12-04 04:09:13
asal
182 orang telah melayarinya

How to Safely Remove Elements from a Vector During Iteration in C  ?

Alih Keluar Elemen daripada Vektor Dalam Gelung

Apabila melelaran melalui vektor, mungkin terdapat senario di mana anda perlu mengalih keluar elemen berdasarkan kriteria tertentu. Walau bagaimanapun, percubaan untuk mengubah suai vektor semasa lelaran boleh membawa kepada ralat masa jalan.

Pertimbangkan senario berikut:

for (vector<Player>::iterator it = allPlayers.begin(); it != allPlayers.end(); it++) {
  if (it->getpMoney() <= 0)
    it = allPlayers.erase(it);
  else
    ++it;
}
Salin selepas log masuk

Kod ini bertujuan untuk mengalih keluar pemain dengan wang sifar atau negatif. Walau bagaimanapun, ia gagal dengan ralat yang berkaitan dengan pengendali tugasan. Untuk menyelesaikan isu ini, elakkan penambahan iterator dalam gelung. Sebaliknya, bergantung pada iterator yang dikembalikan oleh fungsi erase().

for (vector<Player>::iterator it = allPlayers.begin(); it != allPlayers.end(); /*it++*/) {
  if (it->getpMoney() <= 0)
    it = allPlayers.erase(it);
  else
    ++it;
}
Salin selepas log masuk

Selain itu, penggunaan operator= oleh fungsi erase() memerlukan kelas Player boleh ditugaskan, bermakna kelas Player mesti melaksanakan pengendali tugasan.

Padam-Alih Keluar Idiom untuk Vektor Manipulasi

Untuk memudahkan tugas mengalih keluar elemen daripada vektor, gunakan Idiom Erase-Remove:

allPlayers.erase(
  std::remove_if(
    allPlayers.begin(),
    allPlayers.end(),
    [](Player const &amp; p) { return p.getpMoney() <= 0; }
  ),
  allPlayers.end()
);
Salin selepas log masuk

Idiom ini menggabungkan algoritma remove_if() untuk mengenal pasti elemen untuk padam dan kaedah erase() untuk mengalih keluar julat yang diperlukan.

Atas ialah kandungan terperinci Bagaimana untuk Mengeluarkan Elemen dengan Selamat daripada Vektor Semasa Lelaran 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