我对C ++还是很陌生,所以我对lambda函数的工作方式不太熟悉。我想查看向量“问题”是否包含结构项,其特定成员值等于“ animalProblemNumber”。然后,我想返回整个struct项目。以下是我要实现的“ for循环版本”。
我还有一个名为“ checkProblem”的函数,以查看“问题项”是否首先存在。我可以在一个功能中同时实现这两个功能吗?
谢谢能帮助我的人。
Problem getProblem(int animalProblemNumber, std::vector<Problem> problems){
for(Problem p: problems){
if(p.treatment == animalProblemNumber){
return p;
}
}
}
bool checkProblem(int animalProblemNumber, std::vector<Problem> problems){ //change this to lambda
for(Problem p: problems){
if(p.treatment == animalProblemNumber){
return true;
}
}
return false;
}
答案 0 :(得分:2)
如果getProblem()
不包含至少一个匹配项,则返回类型vector
将是一个问题,不是双关语。最好返回一个迭代器。
将输入更改为getProblem()
和const&
,以使返回的迭代器在函数返回时有效。
之后,您可以使用getProblem()
来实现checkProblem()
。j
checkProblem()
更改为接受const&
,尽管严格没有必要。
std::vector<Problem>::const_iterator getProblem(int animalProblemNumber,
std::vector<Problem> const& problems)
{
return std::find_if(problems.begin(), problems.end(),
[animalProblemNumber](Problem const& item)
{ return item.treatment == animalProblemNumber; });
}
和
bool checkProblem(int animalProblemNumber, std::vector<Problem> const& problems)
{
return (getProblem(animalProblemNumber, problems) != problems.end());
}