C++算法minmax()函數有以下3種使用方式:
- 它比較在其參數中傳遞的兩個值並返回它們之間的較小和較大的值,如果兩者相等,則返回 make_pair (a,b)。
- 它還使用由用戶定義的二元函數比較這兩個值,然後在 std::minmax( 中作為參數傳遞)。
- 它還用於查找給定列表中的最小元素和最大元素,如果有多個,則返回第一個最小,如果列表中有多個最大,則返回最後一個。
第一個版本使用 operator< 比較元素,第二個版本使用給定的二進製比較函數 comp 比較元素。
用法
default (1) template <class T>
pair <const T&,const T&> minmax (const T& a, const T& b);
//until C++ 14
custom (2) template <class T, class Compare>
pair <const T&,const T&> minmax (const T& a, const T& b, Compare comp);
//until C++ 14
initializer list (3) template <class T>
pair<T,T> minmax (initializer_list<T> il);
template <class T, class Compare>
pair<T,T> minmax (initializer_list<T> il, Compare comp);
// until C++ 14
default (1) template <class T>
constexpr pair <const T&,const T&> minmax (const T& a, const T& b);
//since C++ 14
custom (2) template <class T, class Compare>
constexpr pair <const T&,const T&> minmax (const T& a, const T& b,
Compare comp););
//since C++ 14
initializer list (3) template <class T>
constexpr pair<T,T> minmax (initializer_list<T> il);
template <class T, class Compare>
constexpr pair<T,T> minmax (initializer_list<T> il, Compare comp);
//since C++ 14
參數
a:要比較的第一個值。
b:要比較的第二個值。
comp: 一個用戶定義的二元謂詞函數,它接受兩個參數,如果兩個參數按順序返回真,否則返回假。它遵循嚴格的弱排序來對元素進行排序。
il:一個 initializer_list 與要比較的值。
返回值
它返回較小的作為第一個元素,較大的作為 a 和 b 之間的第二個元素。如果值相等,則返回 make_pair (a,b)。
返回 il 中的最小值作為第一個值和最大值作為第二個值。如果幾個值等價於更小,則返回最左邊的這樣的值,幾個值等價於更大的,返回最右邊的這樣的值。
複雜度
複雜性是比較元素數量的一倍半。
異常
如果任何比較引發異常,則此函數將引發異常。
請注意,無效參數會導致未定義的行為。
例子1
讓我們看一個簡單的例子來演示 minmax() 的使用:
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
// declaring pair to catch the return value
pair<int, int> mnmx;
// Using minmax(a, b)
mnmx = minmax(53, 23);
// printing minimum and maximum values
cout << "The minimum value obtained is:";
cout << mnmx.first;
cout << "\nThe maximum value obtained is:";
cout << mnmx.second ;
// Using minmax((array of elements)
mnmx = minmax({2, 5, 1, 6, 3});
// printing minimum and maximum values.
cout << "\n\nThe minimum value obtained is:";
cout << mnmx.first;
cout << "\nThe maximum value obtained is:";
cout << mnmx.second;
return 0;
}
輸出:
The minimum value obtained is:23 The maximum value obtained is:53 The minimum value obtained is:1 The maximum value obtained is:6
例子2
讓我們看另一個簡單的例子來演示使用默認版本的 minmax() 的使用:
#include <iostream> // std::cout
#include <algorithm> // std::minmax
using namespace std;
int main () {
auto result = minmax({1,2,3,4,5});
cout << "minmax({1,2,3,4,5}):";
cout << result.first << ' ' << result.second << '\n';
return 0;
}
輸出:
minmax({1,2,3,4,5}):1 5
例子3
讓我們看另一個簡單的例子來演示使用比較函數的 minmax() 的使用:
#include <algorithm>
#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
vector<int> v {3, 1, 4, 1, 5, 9, 2, 6};
srand(time(0));
pair<int, int> bounds = minmax(rand() % v.size(),
rand() % v.size());
cout << "v[" << bounds.first << "," << bounds.second << "]:";
for (int i = bounds.first; i < bounds.second; ++i) {
cout << v[i] << ' ';
}
cout << '\n';
return 0;
}
輸出:
v[0,7]:3 1 4 1 5 9 2
相關用法
- C++ Algorithm minmax_element()用法及代碼示例
- C++ Algorithm min()用法及代碼示例
- C++ Algorithm min_element()用法及代碼示例
- C++ Algorithm max_element()用法及代碼示例
- C++ Algorithm max()用法及代碼示例
- C++ Algorithm merge()用法及代碼示例
- C++ Algorithm make_heap()用法及代碼示例
- C++ Algorithm remove_if()用法及代碼示例
- C++ Algorithm remove()用法及代碼示例
- C++ Algorithm set_union()用法及代碼示例
- C++ Algorithm next_permutation()用法及代碼示例
- C++ Algorithm upper_bound()用法及代碼示例
- C++ Algorithm remove_copy_if()用法及代碼示例
- C++ Algorithm random_shuffle()用法及代碼示例
- C++ Algorithm pop_heap()用法及代碼示例
- C++ Algorithm replace()用法及代碼示例
- C++ Algorithm set_intersection()用法及代碼示例
- C++ Algorithm lower_bound()用法及代碼示例
- C++ Algorithm transform()用法及代碼示例
- C++ Algorithm set_difference()用法及代碼示例
注:本文由純淨天空篩選整理自 C++ Algorithm minmax()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。