如何使用C++标准库获取vector中处于指定数值范围内的最大元素
解决方案
C++20 及以上最简方案
借助范围适配器(ranges)可以实现极简写法,需要引入<algorithm>和<ranges>头文件:
auto filtered = arr | std::views::filter([=](int x) { return x >= low && x <= high; }); int max_val = filtered.empty() ? -1 : *std::ranges::max_element(filtered);
如果可以保证数组中一定存在符合范围的元素,可直接合并为一行代码:
int max_val = *std::ranges::max_element(arr | std::views::filter([=](int x) { return x >= low && x <= high; }));
兼容 C++11 及以上的方案
如果使用的标准版本不支持ranges,可以用std::max_element配合自定义比较谓词实现,需要引入<algorithm>头文件:
int max_val = -1; auto it = std::max_element(arr.begin(), arr.end(), [=](int a, int b) { bool a_ok = a >= low && a <= high; bool b_ok = b >= low && b <= high; return a_ok && b_ok ? a < b : !a_ok && b_ok; }); if (it != arr.end() && *it >= low && *it <= high) { max_val = *it; }
两种方案效果和你现有for循环逻辑完全一致,示例输入{3,5,7,9,5,1,6,7,4,2}、范围[4,8]时,运行得到的max_val就是7。
内容的提问来源于stack exchange,提问作者user12595757
相关产品推荐
相关产品推荐

