首页 > 解决方案 > C ++查找算法:如何找到元素的最后一次出现?

问题描述

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

  1. 一个迭代器,这样我就可以使用 std::distance 来查找该迭代器与向量开头之间的距离,或者

  2. 直接返回所述元素的位置。

一般来说,我要解决的是:(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;});

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

标签: c++algorithmiterator

解决方案


您可以使用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);


推荐阅读