std::remove_if中谓词函数的用法
Usage of predicate function in std::remove_if
我有一个对象向量。我的数据结构如下:
class my_class{
float a; int b;
};
my_class obj;
vector<my_class> vec;
向量vec包含如下形式的数据:
vec
((10.0,2),(100,3),(19.0,3)...)
现在,我打算从vector vec中删除小于或等于vec最后一个元素的元素…为此,我使用erase和remove_if函数:
vec.erase(std::remove_if(vec.begin(), vec.end(), predicate_function(vec, (vec.end()-1).a, (vec.end()-1).b)), vec.end());
我所拥有的predicate_function在"vec"上进行迭代。然而,这违背了使用std::remove_if的目的。有人可以帮助什么谓词函数应该看起来像为了remove_if工作。我不想用lambda_function。我的编译器是GCC
谓词函数将自动从每个Iterator传递参数。所以它看起来像这样:
bool predicate_function(const my_class& m)
{
//Some logic here
}
可以简单地称为:
vec.erase(std::remove_if(vec.begin(), vec.end(), predicate_function), vec.end());
在c++中,std::remove_if
需要一个UnaryPredicate
作为它的第三个形参,它可以是一个函数或函子,接受一个实参并返回bool
。
编辑:要在评论中做你想做的事情,你需要使用functor
(或std::bind
,但我们将在这里走函子路线):
struct compare_last
{
const my_class last_;
compare_last(const my_class& last)
: last_(last)
{ }
bool operator()(const my_class& m) const
{
return m == last_; //Or however you do your comparisons
}
};
my_class& last = *(--vec.end());
vec.erase(std::remove_if(vec.begin(), vec.end(), compare_last(last)), vec.end());
相关文章:
- 构造函数的用法
- C++ 中函数中 Const 用法之间的差异
- 错误:使用复制和交换习惯用法的交换函数中"operator="的重载不明确
- 未命名的函数参数用法
- 使用指针复制构造函数用法
- CPP/C 中的常量用法和结构构造函数中的澄清
- 向下转换指向成员函数的指针.这是合法用法吗?
- 将 PIMPL 习惯用法与成员函数模板一起使用(无需预先了解所有可能的数据类型)
- 复制构造函数方法的用法
- C++向量用法错误:没有匹配的成员函数来调用"push_back"
- Constexpr静态成员函数用法
- 函数原型范围的有趣用法
- lambda 中的跨平台"auto"关键字用法:integral_constant作为函数参数
- 参数和成员变量在构造函数中的用法
- C 中的构造函数和破坏者的内联用法
- unique_ptr旧函数的用法
- 函数调用中“&”的用法,令人困惑
- Sleep()函数用法
- 关于自由静态函数用法的文章
- 监听器c++函数用法