Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah std::remove dalam fungsi C, dan apakah perbezaan antara std::remove dan std::erase?

Bagaimanakah std::remove dalam fungsi C, dan apakah perbezaan antara std::remove dan std::erase?

DDD
Lepaskan: 2024-10-30 02:42:02
asal
730 orang telah melayarinya

How does std::remove in C   function, and what is the difference between std::remove and std::erase?

Memahami Kefungsian std::remove

Dalam C , algoritma std::remove beroperasi pada jujukan arbitrari yang diwakili oleh dua ke hadapan iterator. Tujuannya adalah untuk menyusun semula elemen dalam jujukan, menggerakkan elemen tidak sepadan ke hadapan. Tidak seperti std::erase, remove tidak memadamkan elemen secara fizikal daripada bekas. Sebaliknya, ia menyusun semula mereka.

Contoh

Pertimbangkan coretan kod berikut:

std::vector<int> a;
a.push_back(1);
a.push_back(2);

std::remove(a.begin(), a.end(), 1);

std::vector<int>::iterator iter = a.begin();
std::vector<int>::iterator endIter = a.end();

std::cout << "Using iter...\n";
for (; iter != endIter; ++iter)
{
    std::cout << *iter << "\n";
}

std::cout << "Using size...\n";
for (int i = 0; i < a.size(); ++i)
{
    std::cout << a[i] << "\n";
}
Salin selepas log masuk

Outputnya ialah:

Using iter...
2
2

Using size...
2
2
Salin selepas log masuk

Walaupun alih keluar telah menggerakkan elemen 2 dengan berkesan ke hadapan, saiz vektor kekal tidak berubah pada 2 kerana memori yang tidak dimulakan belum dialih keluar.

Idiom Padam-Alih Keluar

Idiom padam-buang menggabungkan keluarkan dan padam untuk membuang unsur-unsur yang tidak diingini secara fizikal. Kod:

a.erase(std::remove(a.begin(), a.end(), 1), a.end());
Salin selepas log masuk

akan mengalih keluar elemen 1 daripada vektor dan mengurangkan saiznya kepada 1.

Kes Penggunaan std::remove

Walaupun penggunaan utama alih keluar adalah dalam simpulan bahasa padam-buang, ia juga boleh digunakan dalam situasi lain, seperti:

  • Mengenal pasti kejadian terakhir unsur: Dengan mengalih keluar semua kejadian kecuali yang terakhir, anda boleh menggunakan iterator yang dikembalikan dengan mengeluarkan untuk menentukan penampilan terakhir.
  • Mencipta jujukan baharu dengan elemen unik: Dengan mengalih keluar unsur pendua, anda boleh menjana jujukan baharu yang mengandungi hanya unsur yang berbeza.
  • Membahagikan jujukan kepada dua bahagian: Dengan menggunakan alih keluar, anda boleh membahagikan jujukan kepada dua segmen, satu mengandungi unsur padanan dan satu lagi mengandungi unsur tidak sepadan.

Atas ialah kandungan terperinci Bagaimanakah std::remove dalam fungsi C, dan apakah perbezaan antara std::remove dan std::erase?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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