C++ 算法 minmax_element() 函數用於返回一個pair,其中迭代器指向範圍[first, last) 中的最小值作為第一個元素,最大的作為第二個元素。
如果多個值等價於更小,則第一個迭代器指向這樣的值中的第一個,多個值等價於更大的值,第二個迭代器指向這樣的值中的最後一個。
對於第一個版本使用運算符 < 比較元素,或者對於第二個版本使用給定的二進製比較函數 comp 比較元素。
用法
default (1) template <class ForwardIterator>
pair<ForwardIterator,ForwardIterator>
minmax_element (ForwardIterator first, ForwardIterator last);
custom (2) template <class ForwardIterator, class Compare>
pair<ForwardIterator,ForwardIterator>
minmax_element (ForwardIterator first, ForwardIterator last, Compare comp);
參數
first:一個輸入迭代器,指示要比較的範圍的第一個位置。
last:一個輸入迭代器,指示要比較的範圍中過去的最後一個元素。
comp: 一個用戶定義的二元謂詞函數,它接受兩個參數,如果兩個參數按順序返回真,否則返回假。它遵循嚴格的弱排序來對元素進行排序。
il:一個 initializer_list 與要比較的值。
返回值
它將較小的值作為第一個元素返回,較大的值作為 [first, last) 範圍內的第二個元素返回。
如果多個值等價於更小,則第一個迭代器指向這樣的值中的第一個,多個值等價於更大的值,第二個迭代器指向這樣的值中的最後一個。
複雜度
複雜度是線性的,比所比較的元素數量少 1.5 倍。
數據競爭
訪問範圍 [first, last) 中的對象。
異常
如果任何比較引發異常,則此函數將引發異常。
注意:無效的參數會導致未定義的行為。
例子1
讓我們看一個簡單的例子來演示 minmax_element() 的使用:
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v = { 3, 9, 1, 4, 2, 5, 9 };
auto result = minmax_element(v.begin(), v.end());
cout << "min element at:" << (result.first - v.begin()) << '\n';
cout << "max element at:" << (result.second - v.begin()) << '\n';
return 0;
}
輸出:
min element at:2 max element at:6
例子2
讓我們看另一個簡單的例子來演示使用默認版本的 minmax_element() 的使用:
#include <iostream> // std::cout
#include <algorithm> // std::minmax_element
#include <array> // std::array
using namespace std;
int main () {
array<int,7> foo {3,7,2,9,5,8,6};
auto result = minmax_element (foo.begin(),foo.end());
// print result:
cout << "min is " << *result.first;
cout << ", at position " << (result.first-foo.begin()) << '\n';
cout << "max is " << *result.second;
cout << ", at position " << (result.second-foo.begin()) << '\n';
return 0;
}
輸出:
min is 2, at position 2 max is 9, at position 3
例子3
讓我們看另一個簡單的例子來演示使用比較函數的 minmax_element() 的使用:
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
// initializing vector of integers
vector<int> vi = { 5, 3, 4, 4, 3, 5, 3 };
// declaring pair pointer to catch the return value
pair<vector<int>::iterator, vector<int>::iterator> mnmx;
// using minmax_element() to find
// minimum and maximum element
// between 0th and 3rd number
mnmx = minmax_element(vi.begin(), vi.begin() + 4);
// printing position of minimum and maximum values.
cout << "The minimum value position obtained is:";
cout << mnmx.first - vi.begin() << endl;
cout << "The maximum value position obtained is:";
cout << mnmx.second - vi.begin() << endl;
cout << endl;
// using duplicated
// prints 1 and 5 respectively
mnmx = minmax_element(vi.begin(), vi.end());
// printing position of minimum and maximum values.
cout << "The minimum value position obtained is:";
cout << mnmx.first - vi.begin() << endl;
cout << "The maximum value position obtained is:";
cout << mnmx.second - vi.begin()<< endl;
return 0;
}
輸出:
The minimum value position obtained is:1 The maximum value position obtained is:0 The minimum value position obtained is:1 The maximum value position obtained is:5
相關用法
- C++ Algorithm minmax()用法及代碼示例
- 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_element()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。