Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah std::remove dalam fungsi C, dan apakah perbezaan antara std::remove dan 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"; }
Outputnya ialah:
Using iter... 2 2 Using size... 2 2
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());
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:
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!