【问题标题】:C++ find first element in vector satisfying a condition using the std libraryC ++使用std库找到满足条件的向量中的第一个元素
【发布时间】:2020-07-17 15:33:17
【问题描述】:

我有一个包含对象的向量,每个对象都有一个返回布尔值的方法。 我想找到方法返回true的第一个元素。

我知道我可以简单地使用 for 循环遍历向量,但是我正在寻找使用 std 库的解决方案

谷歌搜索我什么也没找到,只有 findfind_if 函数,但这不是我要找的。我正在寻找一个基本上引用向量和 lambda 并返回 lambda 返回 true 的第一个元素的函数。

注意:我也对返回一个元素的函数感兴趣,不一定是第一个。

【问题讨论】:

  • 听起来很像find_if
  • 算法是根据迭代器定义的,因为这将操作与容器的遍历分离。如果你通过vec.begin()vec.end() 你得到第一个匹配的元素,如果你通过vec.rbegin()vec.rend() 你得到最后一个匹配的元素。如果您想编写一个跳过所有其他元素的自定义迭代器,您可以编写它并仍然使用相同的 find_if

标签: c++ search vector find


【解决方案1】:

你要找的是std::ranges::find_if,你会像这样使用它

auto iterator = std::ranges::find_if(vector, lambda);

这确实需要 C++20 支持。如果您没有,请使用普通的旧 std::find_if 之类的

auto iterator = std::find_if(vector.begin(), vector.end(), lambda);

【讨论】:

  • 如何使用迭代器?我只需要一个元素
  • @ninazzo 迭代器指向单个元素。要访问它,您只需使用*iterator,尽管在此之前您应该检查并确保迭代器不等于向量的结束迭代器。
猜你喜欢
  • 2017-01-03
  • 2013-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-14
  • 1970-01-01
相关资源
最近更新 更多