c++ - 如何获取属于某个范围的 vector 中的最大元素?

虽然有一个明确的 for 循环解决方案,但我一直在寻找一个解决方案来获得给定范围内 vector 的最大值。

例如假设一个 vector 有 3,5,7,9,5,1,6,7,4,2 并且给定的范围是 [4,8] 那么最大元素应为 7

我一直在寻找一种使用一些内置标准库函数的单行/短解决方案。

数组包含所有正数。

这是我试过的:

int max = -1;
for (i = 0; i < n; i++)
    if (arr[i] > max && arr[i] >= low && arr[i] <= high)
        max = arr[i];

我只是在寻找一个简单的标准库 vector 解决方案。

最佳答案

在一行中挤太多东西或总是使用算法并不总是值得的,尤其是当循环清晰易读时。总之,如果您愿意,可以使用 std::accumulate。二元运算与您的原始代码非常接近,我只是使用了条件运算符而不是 if:

auto x = std::accumulate(arr.begin(),arr.end(),-1,[high,low](int accu,int elem){
    return (elem > accu && elem >= low && elem <= high ) ? elem : accu;
});

Live Demo

https://stackoverflow.com/questions/69194358/

相关文章:

python - 在 PySpark 中的 groupby 之后计算 sum 和 countDist

c++ - std::transform 中未解析的重载函数类型

javafx - 在 javafx 中显示单 Pane 警报

r - 根据R中的组和行计算差异

java - 在 Windows 上使用 Jar 文件启动 JMeter 时出现白色空白屏幕

javascript - 如何给一个空的 td 上课?

javascript - Material ui 版本 4-11.4 的文档丢失

r - 如何在 R 中为函数添加红线

list - 如何为 SwiftUI 列表中的单个行设置动画?

html - 使 flexbox 垂直增长