首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++查找算法:如何找到元素的最后一次出现?

C++查找算法:如何找到元素的最后一次出现?
EN

Stack Overflow用户
提问于 2019-10-20 03:25:25
回答 3查看 658关注 0票数 0

我想找到满足给定条件的数组的最后一个元素。作为回报,我想:

  1. 迭代器,因此我可以使用std::距离来查找该迭代器与向量开头之间的距离,或者
  2. 直接返回所述元素的位置。

一般来说,我试图解决的是:(i)在向量(max_element)中找到最大元素,(ii)在最大元素之前找到0的第一次出现。

因此,在以下示例中:

代码语言:javascript
复制
{0, 10, 20, 0, 5, 50, 0, 70, 10, 0} 
// Get max at position 7, return 0 at position 6

在使用了来自算法头的max_element之后,我尝试了下面的代码片段,使用反向迭代器。

代码语言:javascript
复制
auto Itr1 = std::max_element(vect.begin(), vect.end());
auto Itr2 = std::find(Itr1, vect.rend(), [](int i){return i == 0;});

将反向迭代器和前向迭代器混合使用并不有趣,也不起作用。似乎应该有一个更优雅的解决方案。

EN

Stack Overflow用户

回答已采纳

发布于 2019-10-20 04:20:30

但是,这并不是很优雅,它需要另一个只包含0的向量:

代码语言:javascript
复制
std::vector<int> v1 { 0, 10, 20, 0, 5, 50, 0, 70, 10, 0 };
std::vector<int> v2 { 0 };

auto Itr1 = std::max_element(v1.begin(), v1.end());
auto Itr2 = std::find_end(v1.begin(), Itr1, v2.begin(), v2.end());
票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58469796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档