std:: min
|
定义于头文件
<algorithm>
|
||
|
template
<
class
T
>
const T & min ( const T & a, const T & b ) ; |
(1) | (C++14 起为 constexpr) |
|
template
<
class
T,
class
Compare
>
const T & min ( const T & a, const T & b, Compare comp ) ; |
(2) | (C++14 起为 constexpr) |
|
template
<
class
T
>
T min ( std:: initializer_list < T > ilist ) ; |
(3) |
(C++11 起)
(C++14 起为 constexpr) |
|
template
<
class
T,
class
Compare
>
T min ( std:: initializer_list < T > ilist, Compare comp ) ; |
(4) |
(C++11 起)
(C++14 起为 constexpr) |
返回给定值中的较小值。
目录 |
参数
| a, b | - | 要比较的值 |
| ilist | - | 包含待比较值的初始化列表 |
| cmp | - |
比较函数对象(即满足
Compare
要求的对象),当
a
小于
b
时返回
true
。
比较函数的签名应等价于如下形式: bool cmp ( const Type1 & a, const Type2 & b ) ;
虽然签名不需要包含
const
&
,但函数不得修改传递给它的对象,且必须能够接受所有(可能为 const 的)
|
返回值
复杂度
可能的实现
| min (1) |
|---|
template<class T> const T& min(const T& a, const T& b) { return (b < a) ? b : a; } |
| min (2) |
template<class T, class Compare> const T& min(const T& a, const T& b, Compare comp) { return (comp(b, a)) ? b : a; } |
| min (3) |
template<class T> T min(std::initializer_list<T> ilist) { return *std::min_element(ilist.begin(), ilist.end()); } |
| min (4) |
template<class T, class Compare> T min(std::initializer_list<T> ilist, Compare comp) { return *std::min_element(ilist.begin(), ilist.end(), comp); } |
注释
当某个参数是临时对象且该参数被返回时,通过引用捕获
std::min
的结果会产生悬垂引用:
int n = -1; const int& r = std::min(n + 2, n * 2); // r 成为悬垂引用
示例
#include <algorithm> #include <iostream> #include <string_view> int main() { std::cout << "10 与 010 中较小的是 " << std::min(10, 010) << '\n' << "'d' 与 'b' 中较小的是 '" << std::min('d', 'b') << "'\n" << "\"foo\"、\"bar\" 和 \"hello\" 中最短的是 \"" << std::min({"foo", "bar", "hello"}, [](const std::string_view s1, const std::string_view s2) { return s1.size() < s2.size(); }) << "\"\n"; }
输出:
10 与 010 中较小的是 8 'd' 与 'b' 中较小的是 'b' "foo"、"bar" 和 "hello" 中最短的是 "foo"
缺陷报告
下列行为变更缺陷报告被追溯应用于先前发布的 C++ 标准。
| 缺陷报告 | 应用于 | 发布时行为 | 正确行为 |
|---|---|---|---|
| LWG 281 | C++98 |
要求
T
满足
CopyConstructible
对于重载
(
1,2
)
|
无需此要求 |
| LWG 2239 |
C++98
C++11 |
1. 要求
T
满足
LessThanComparable
对于
重载 ( 2 ) (C++98) 和 ( 4 ) (C++11) 2. 缺失复杂度要求 |
1. 无需此要求
2. 补充了要求 |
参见
|
返回给定值中的较大者
(函数模板) |
|
|
(C++11)
|
返回两个元素中的较小者和较大者
(函数模板) |
|
返回范围内的最小元素
(函数模板) |
|
|
(C++17)
|
将值限制在一对边界值之间
(函数模板) |
|
(C++20)
|
返回给定值中的较小者
(算法函数对象) |