gpt4 book ai didi

c++ - 查找 std::vector 中的最后一个非零元素

转载 作者:太空狗 更新时间:2023-10-29 23:49:21 27 4
gpt4 key购买 nike

我试图找到 std::vector<double> 中最后一个非零元素的索引.如果 vector 中的最后一个元素不为零,那么它应该返回最后一个元素的索引。

我相信我可以使用 std::find_if_not , reverse 迭代器和 std::distance ,基于此:

std::find_if_not(amounts.rbegin(), amounts.rend(), 0.0)

哪里amountsstd::vector<double> , 但我很难将它与 std::distance 结合起来和一个前向迭代器 amounts.begin() .

此外,有没有一种方法可以引入一个谓词进行比较,比如说 1e-8 的公差?

我正在使用 C++11。

最佳答案

例子:

std::vector<double> v{1.32, 1.423, 2.543, 3.534, 4.2, 0};

auto result1 = std::find_if(std::rbegin(v), std::rend(v), [](auto& v) { return std::fabs(v - 0) > std::numeric_limits<double>::epsilon(); } );
if (result1 != std::rend(v)) {
std::cout << *result1 << "\n";
std::cout << std::distance(std::begin(v), (result1 + 1).base());
}

输出:

4.2
4

[编辑]

更多解释:

std::fabs(v - 0) > std::numeric_limits<double>::epsilon(); }

在 OP 问题中有:

Also, is there a way I can introduce a predicate to compare on, say a tolerance of 1e-8?

所以这是这样的公差检查,您可以将 epsilon 的使用替换为其他值。

关于c++ - 查找 std::vector 中的最后一个非零元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42535163/

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