![](/img/trans.png)
[英]Using std::remove_if with lambda predicate to delete multiple elements
[英]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無關。 以下代碼也將無法編譯:
sobj strobj;
is_stime(strobj.timer, 5);
is_stime()
需要采用const引用,否則lambda需要傳遞非const引用。 is_stime()
對您的lambda不可見。 你想知道更多嗎? #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缺少返回類型:
[&](const sobj& mysobj)->bool
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.