在 C++ 標(biāo)準(zhǔn)庫(kù) <algorithm>
中,remove_if()
和 remove()
都是用于處理容器中元素的方法,但它們的實(shí)現(xiàn)和行為有所不同。
remove()
方法:
remove()
方法用于移除容器中所有等于指定值的元素。它并不真正刪除這些元素,而只是將不需要?jiǎng)h除的元素移到容器的前面,并返回一個(gè)指向“新”末尾的迭代器。要真正刪除這些元素,需要使用容器的 erase()
方法。示例代碼:
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v = {1, 2, 3, 2, 4, 2, 5};
auto new_end = std::remove(v.begin(), v.end(), 2);
v.erase(new_end, v.end());
for (int x : v) {
std::cout<< x << ' ';
}
return 0;
}
輸出:
1 3 4 5
remove_if()
方法:
remove_if()
方法用于移除滿(mǎn)足指定條件的所有元素。與 remove()
不同,remove_if()
接受一個(gè)謂詞函數(shù)(即一個(gè)返回布爾值的函數(shù)或函數(shù)對(duì)象),并使用該謂詞函數(shù)來(lái)判斷哪些元素應(yīng)該被移除。示例代碼:
#include <iostream>
#include <vector>
#include <algorithm>
bool is_even(int x) {
return x % 2 == 0;
}
int main() {
std::vector<int> v = {1, 2, 3, 4, 5, 6, 7, 8, 9};
auto new_end = std::remove_if(v.begin(), v.end(), is_even);
v.erase(new_end, v.end());
for (int x : v) {
std::cout<< x << ' ';
}
return 0;
}
輸出:
1 3 5 7 9
總結(jié):
remove()
用于移除等于指定值的元素,而 remove_if()
用于移除滿(mǎn)足指定條件的元素。remove()
和 remove_if()
都不會(huì)真正刪除元素,而是將不需要?jiǎng)h除的元素移到容器的前面。要真正刪除這些元素,需要使用容器的 erase()
方法。remove_if()
更加靈活,因?yàn)樗梢越邮苋魏螡M(mǎn)足要求的謂詞函數(shù)。