gpt4 book ai didi

c++ - 如何检查 ranges::algorithms 如 find_if 是否返回值?

转载 作者:行者123 更新时间:2023-11-30 01:33:31 26 4
gpt4 key购买 nike

例如,如果我想找到集合中的最小元素,但只是最小的偶数元素,我想调用ranges::min_element像这样的过滤范围:

using ranges::views::filter;
using ranges::min_element;
std::vector<int> vals{1,2,3,4,5};
auto minVal = min_element(vals | filter([](int next){return next % 2 == 0;}));

如何检查返回的范围是否为空,如果不是,则访问该值?

这同样适用于其他范围算法,如 ranges::findranges::find_if

最佳答案

很遗憾,您不能将临时范围传递给范围算法。

这是因为它们将在完成时返回一个范围迭代器(可能是 ranges::end(rng))。如果你传递一个临时的,返回的迭代器将是无效的;引用一个临时的。范围库检测到这一点并返回一个虚拟哨兵,ranges::dangling而不是迭代器。

执行此操作的正确方法是首先组成过滤范围然后调用算法。

std::vector<int> vals {1, 2, 3, 4, 5};
auto even_vals = vals | filter([](int val){return val % 2 == 0;});
auto minVal = min_element(even_vals);
if (minVal == even_vals.end())
std::cout << "no values\n";
else
std::cout << *minVal; // prints "2"

Demo

关于c++ - 如何检查 ranges::algorithms 如 find_if 是否返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58400325/

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