gpt4 book ai didi

C++ 查找算法 : How do I find the last occurance of an element?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:49:18 25 4
gpt4 key购买 nike

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

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

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

一般来说,我要解决的问题是:(i) 找到 vector 中的最大元素 (max_element),以及 (ii) 找到该最大元素之前第一次出现的 0。

所以在下面的例子中:

{0, 10, 20, 0, 5, 50, 0, 70, 10, 0} 
// Get max at position 7, return 0 at position 6

在使用算法 header 中的 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> .还要注意第三个参数 which find() takes 是要找到的值。

    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);

关于C++ 查找算法 : How do I find the last occurance of an element?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58469796/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com