【发布时间】:2021-11-10 14:47:14
【问题描述】:
虽然有一个明确的 for 循环解决方案,但我一直在寻找一种解决方案来获得给定范围内向量中的最大值。
例如假设一个向量有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];
我只是在寻找一个简单的标准库矢量解决方案。
【问题讨论】:
-
您可以使用
std::max_element()和lambda来检查当前值是否在范围内 -
我认为 C++20 范围是一个不错的解决方案(排序 | equal_range | reverse | take(0)),但在 C++17 中,有问题的范围可能是最好的。
-
范围内没有元素时应该返回什么?
-1? -
你写它的方式很简单。您可以将其缩减为
for (auto e : vec) if (e > max && e >= low && e <= high) max = e; -
请注意,上面的算法与
max_element略有不同:如果最大值有多个副本,则max_element返回第一个,但原始函数返回最后一个。 (在这种情况下不重要,因为这些值是整数,但如果它们更复杂,可能会变得重要。)
标签: c++ algorithm c++17 stdvector c++-standard-library