std::remove_if 使用 lambda 谓词
std::remove_if with lambda predicate
我想从基于 lambda 谓词的向量中删除一个对象:
class tmr
{
public:
tmr();
~tmr();
static void start();
bool is_time_out(double sec);
double t_elapsed();
};
struct sobj
{
int count;
bool tflag;
int ID;
tmr timer;
friend bool is_stime(timer& objtimer,double sec)
{
return objtimer.is_time_out(sec);
}
};
在主程序的某个地方,我填充了一个 vector<sobj>
,然后过了一段时间,我想删除指定 ID 且计时器已过的元素。
我这样做了,它抱怨无法将 void 转换为 bool
sobj strobj;
vector<sobj> vecobj;
vecobj.erase(std::remove_if(vecobj.begin(),vecobj.end(),[&](const sobj& mysobj){return ( mysobj.ID== THE_ID && mysobj.is_stime(mysobj.timer,5));}),vecobj.end());
您的 lambda 缺少 return 类型:
[&](const sobj& mysobj)->bool
要事第一:
请注意,这与 lambda 关系不大。以下代码也将无法编译:
sobj strobj;
is_stime(strobj.timer, 5);
采取的步骤:
- 让我们减少您的测试用例..
is_stime()
需要一个 const 引用,或者你的 lambda 需要传递一个非常量引用。
is_stime()
对您的 lambda 不可见。 Would you like to know more?
简化代码:
#include <iostream>
#include <vector>
using namespace std;
int THE_ID;
class tmr {
};
struct sobj {
int ID;
tmr timer;
friend bool is_stime(tmr const & objtimer, double sec);
};
bool is_stime(tmr const & objtimer, double sec) {
return true;
}
int main() {
vector<sobj> vecobj;
vecobj.erase(std::remove_if(vecobj.begin(),vecobj.end(),[&](const sobj& mysobj){return ( mysobj.ID == THE_ID && is_stime(mysobj.timer,5));}),vecobj.end());
}
我想从基于 lambda 谓词的向量中删除一个对象:
class tmr
{
public:
tmr();
~tmr();
static void start();
bool is_time_out(double sec);
double t_elapsed();
};
struct sobj
{
int count;
bool tflag;
int ID;
tmr timer;
friend bool is_stime(timer& objtimer,double sec)
{
return objtimer.is_time_out(sec);
}
};
在主程序的某个地方,我填充了一个 vector<sobj>
,然后过了一段时间,我想删除指定 ID 且计时器已过的元素。
我这样做了,它抱怨无法将 void 转换为 bool
sobj strobj;
vector<sobj> vecobj;
vecobj.erase(std::remove_if(vecobj.begin(),vecobj.end(),[&](const sobj& mysobj){return ( mysobj.ID== THE_ID && mysobj.is_stime(mysobj.timer,5));}),vecobj.end());
您的 lambda 缺少 return 类型:
[&](const sobj& mysobj)->bool
要事第一:
请注意,这与 lambda 关系不大。以下代码也将无法编译:
sobj strobj;
is_stime(strobj.timer, 5);
采取的步骤:
- 让我们减少您的测试用例..
is_stime()
需要一个 const 引用,或者你的 lambda 需要传递一个非常量引用。is_stime()
对您的 lambda 不可见。 Would you like to know more?
简化代码:
#include <iostream>
#include <vector>
using namespace std;
int THE_ID;
class tmr {
};
struct sobj {
int ID;
tmr timer;
friend bool is_stime(tmr const & objtimer, double sec);
};
bool is_stime(tmr const & objtimer, double sec) {
return true;
}
int main() {
vector<sobj> vecobj;
vecobj.erase(std::remove_if(vecobj.begin(),vecobj.end(),[&](const sobj& mysobj){return ( mysobj.ID == THE_ID && is_stime(mysobj.timer,5));}),vecobj.end());
}