std::ranges::min_max_result
|
在标头
<algorithm> 定义 |
||
|
template <class T>
struct min_max_result; |
(C++20 起) | |
ranges::min_max_result 是类模板,提供存储二个同类型对象或引用为单个单元的方式。
此类模板无基类或显示如下的声明的数据成员,从而它适合用于结果化绑定。
此类模板的所有特殊成员函数均为隐式声明,这使得特化为聚合类,并传播数据成员上的操作的平凡性、潜在抛出性及 constexpr 性质。
模板形参
| T | - | ranges::min_max_result 所存储的对象或引用的类型 |
数据成员
std::ranges::min_max_result::min
|
[[no_unique_address]] T min;
|
||
可能为到范围中最小元素的引用、指向它的迭代器或其副本。
std::ranges::min_max_result::max
|
[[no_unique_address]] T max;
|
||
可能为到范围中最大元素的引用、指向它的迭代器或其副本。
成员函数
std::ranges::min_max_result::operator min_max_result<T2>
|
template<class T2>
requires std::convertible_to<const T&, T2> |
(1) | |
|
template<class T2>
requires std::convertible_to<T, T2> |
(2) | |
通过从 *this 的每个数据成员构造结果的对应成员,转换 *this 为结果。
1) 等价于 return {min, max}; 。
2) 等价于 return {std::move(min), std::move(max)}; 。
标准库
下列标准库函数以 ranges::min_max_result 为返回类型:
算法函数 |
|
|
(C++20)
|
返回两个元素的较小和较大者 (niebloid) |
|
(C++20)
|
返回范围中的最小和最大元素 (niebloid) |
概要
namespace std::ranges { template<class T> struct min_max_result { [[no_unique_address]] T min; [[no_unique_address]] T max; template<class T2> requires std::convertible_to<const T&, T2> constexpr operator min_max_result<T2>() const & { return {min, max}; } template<class T2> requires std::convertible_to<T, T2> constexpr operator min_max_result<T2>() && { return {std::move(min), std::move(max)}; } }; }
注解
每个使用此返回类型族的标准库算法声明新的别名类型,例如 using merge_result = in_in_out_result<I1, I2, O>; 。
这些别名族的名称由添加 "_result" 到算法名组成。故 std::ranges::merge 的返回类型能命名为 std::ranges::merge_result 。
不同于 std::pair 与 std::tuple ,此类模板的拥有名字有意义的数据成员。
示例
#include <algorithm> #include <ranges> int main() { constexpr static auto v = {3, 1, 4, 1, 5, 9, 2}; { constexpr auto result = std::ranges::minmax(v); static_assert(1 == result.min && 9 == result.max); } { constexpr auto result = std::ranges::minmax_element(v); static_assert(1 == *result.min && 9 == *result.max); } }
参阅
| 实现二元组,即一对值 (类模板) |
|
|
(C++11)
|
实现固定大小的容器,它保有类型可以相异的元素 (类模板) |