c++ - C ++查找算法:如何找到元素的最后一次出现?
问题描述
我想找到满足给定条件的数组的最后一个元素。作为回报,我想要:
一个迭代器,这样我就可以使用 std::distance 来查找该迭代器与向量开头之间的距离,或者
直接返回所述元素的位置。
一般来说,我要解决的是:(i)找到向量中的最大元素(max_element),以及(ii)在该最大元素之前找到第一个出现的0。
所以在下面的例子中:
{0, 10, 20, 0, 5, 50, 0, 70, 10, 0}
// Get max at position 7, return 0 at position 6
在使用算法头中的 max_element 之后,我尝试了类似下面的代码片段使用反向迭代器。
auto Itr1 = std::max_element(vect.begin(), vect.end());
auto Itr2 = std::find(Itr1, vect.rend(), [](int i){return i == 0;});
混合反向和正向迭代器并不好玩,也不起作用。似乎应该有一个更优雅的解决方案。
解决方案
您可以使用make_reverse_iterator()
header 中定义的<iterator>
。另请注意,第三个参数find()
是要找到的值。
std::vector<int> A{ 0, 10, 20, 0, 5, 50, 0, 70, 10, 0 };
auto itr1 = std::max_element(A.begin(), A.end());
auto itr2 = std::find(std::make_reverse_iterator(itr1), A.rend(), 0);
推荐阅读
- react-native - React Native 后台位置 (@mauron85/react-native-background-geolocation) - 安装问题,如何将模块与 Expo 托管工作流链接?
- algorithm - 最大子数组问题如何具有最优子结构?
- apache-kafka - Kafka 流状态存储分布
- javascript - 在Vue3中传递对象数组并循环遍历它的正确语法是什么
- typescript - D3.js:“this”隐含类型“any”,因为它没有类型注释
- javascript - 如何访问另一个类/ TypeScript 中的类
- node.js - Graphql 使用带有突变的普通解析器
- javascript - 我想添加一个功能,如果我回答所有 5 个问题,页面应该重定向到另一个 url ( /result ) 以显示结果
- java - Spring 模糊构造函数
- regex - 当网站的某个页面时,如何从不同的根目录提供图像。Nginx