要自定義std::remove的行為,可以自定義一個函數或者函數對象,并將其作為第三個參數傳遞給std::remove函數。
例如,假設我們想要自定義std::remove函數,使其在刪除元素時打印一條消息。我們可以定義一個函數對象來實現這個功能,如下所示:
#include <iostream>
#include <algorithm>
#include <vector>
template <typename T>
struct CustomRemove {
CustomRemove(const T& val) : value(val) {}
bool operator() (const T& elem) const {
bool result = elem == value;
if(result) {
std::cout << "Removing element: " << elem << std::endl;
}
return result;
}
T value;
};
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
vec.erase(std::remove(vec.begin(), vec.end(), CustomRemove<int>(3)), vec.end());
for(const auto& elem : vec) {
std::cout << elem << " ";
}
std::cout << std::endl;
return 0;
}
在上面的代碼中,我們定義了一個名為CustomRemove的函數對象,它重載了()運算符來實現我們的自定義行為。在main函數中,我們使用std::remove函數來刪除包含值3的元素,并傳遞了CustomRemove
通過自定義函數對象,我們可以自定義std::remove函數的行為,從而實現我們想要的功能。