我有一些带有lambda表达式的代码,我的问题是,仅当“ if”不是nullptr时,我才想返回一些内容。其他方式我不想返回任何东西。可以在此代码中使用退货吗?还是另一种不发出警告的方式?
-
效果很好,但是这个警告很烦人,我知道我应该为此做些事情。
答案 0 :(得分:3)
重新排列范围[first,last)中的元素,以使谓词p返回true的所有元素都在谓词p返回false的元素之前。保留元素的相对顺序。
使用时
return !x->object2->parameter_;
您想将!x->object2->parameter_
为真的所有元素放在左边,并将!x->object2->parameter_
为false的所有元素放在右边。
以此判断,如果x->object2_
是nullptr
,则应该将它们放在右边。因此,默认return
必须为
return false;
因此
auto iter = std::stable_partition(object1->vector_.begin(),
object1->vector_.end(),
[](Class* x) -> bool
{
if (x->object2_ != nullptr)
{
return !x->object2->parameter_;
}
return false;
});
您可以将函数的主体合并为一行,如下所示:
auto iter = std::stable_partition(object1->vector_.begin(),
object1->vector_.end(),
[](Class* x) -> bool
{
return (x->object2_ != nullptr) && (!x->object2->parameter_);
});