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
654 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!

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