将函数转换为find_if lambda
convert function into find_if lambda
我在将函数转换为 std::find_if lamnda 时遇到了一些麻烦。下面你可以看到我的函数
bool Room::ItemInRoomPresent(std::string & item)
{
bool isPresent = false;
for (std::vector<Item>::iterator i = m_RoomItems.begin(); i !=m_RoomItems.end(); i++)
{
if (i->GetName() == item)
{
item == i->GetName();
isPresent = true;
break;
}
}
return isPresent;
}
有人可以帮助我吗?
如注释中所述,如果您对找到项目的位置不感兴趣,只是对序列中任何地方至少有一个匹配的项目不感兴趣,您可以使用std::any_of
并将其本质上设置为单行:
return std::any_of(m_RoomItems.begin(),
m_RoomItems.end(),
[&](Item const& x) { return x.GetName() == item; });
传递的 lambda 与 Kerrek 的版本相同,但可以直接使用返回值。
像这样:
auto it = std::find_if(m_RoomItems.begin(), m_RoomItems.end(),
[&](const Item& x) { return x.GetName() == item; });
return it != m_RoomItems.end();
(您if
声明中item == i->GetName();
的语句没有效果,所以我省略了它。
相关文章:
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 可组合的lambda/std::函数与std::可选
- 我的简单if-else语句是如何无法访问的代码
- 如何将enable-if与模板参数和参数包一起使用
- 无论条件是否为true,if总是在c++中执行
- Arduino:for/while/if在void setup()或void loop()之前?——错误:之前需要不合格
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 如何建立使用模板函数的lambda函数的尾部返回类型
- Insert函数不适用于2 if语句C++
- If语句未被求值C++
- C++嵌套if语句,基本货币交换
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 是否可以使用if constexpr删除控制流语句
- 在通用 lambda 中使用 constexpr-if 来确定参数的类型
- 在 if 语句中返回布尔值的 lambda 表达式
- 'if constexpr branch'不会在模板函数内的 lambda 中被丢弃
- IF-ELSE语句的Lambda表达式的返回类型扣除
- if constexpr的False分支未在模板化lambda中丢弃
- c++ 11中的lambda函数定义中的if-else
- 是否有一种方法可以在IF中编写lambda表达式并捕获所有内容