获取编译时静态constexpr数组的最小/最大值
Get min / max value of a static constexpr array at compile time
假设我有一个定义为整数的数组:
static constexpr int IntArray[] = {1, 5, 10, 12, 17};
是否有办法在编译时获得最小或最大值?
让我们为未来的搜索着陆器提供c++ 17解决方案:
constexpr int IntArray[] = {1, 5, 10, 12, 17};
constexpr int min = *std::min_element(std::begin(IntArray), std::end(IntArray));
static_assert(min == 1);
c++ 11对constexpr
函数更挑剔,所以我们必须推出递归算法。这是一个简单的线性格式:
template <class T>
constexpr T &constexpr_min(T &a, T &b) {
return a > b ? b : a;
}
template <class T>
constexpr T &arrayMin_impl(T *begin, T *end) {
return begin + 1 == end
? *begin
: constexpr_min(*begin, arrayMin_impl(begin + 1, end));
}
template <class T, std::size_t N>
constexpr T &arrayMin(T(&arr)[N]) {
return arrayMin_impl(arr, arr + N);
}
constexpr int IntArray[] = {1, 5, 10, 12, 17};
constexpr int min = arrayMin(IntArray);
在Coliru上观看
相关文章:
- 使用指针从C++中的数组中获取最大值
- 在二维数组中查找最小值和最大值?
- 查找数组中第一个最小值和最后一个最大值元素之间的算术平均值
- CUDA - 将 float3 数组的 (x,y,z) 分量的最小值/最大值分开?
- 查找包含 N 个元素的数组的最小值和最大值
- 有没有一种惯用的方法可以在不存储变换或不必要地重新计算的情况下找到数组变换的最小/最大值?
- C++ 从数组中删除一个最大值和零
- 我无法显示包含整数最大值的索引. 但我可以显示数组中整数的最高值
- 使用数组将最后一个最大值更改为第一个最小值
- 练习循环和使用循环 1 次以及如何获取数组的最大值
- 如何在给定数组的任何子数组(任何大小)中找到最大值(或最小值)?
- C++数组的最大值、最小值、平均值函数
- C ++试图找到数组中每一行的最大值
- 从二维数组中查找最小值和最大值
- 数组的最大值
- 数组函数似乎没有找到最大值
- 未初始化数组中的最小值和最大值
- 用程序在C++中找到最大静态数组大小
- 最大利润数组c++多次出售
- 创建可分配的最大字符数组