STL algorithm演算法minmax,minmax_element(36),stlalgorithm
minmax原型:
std::minmax
| default (1) |
template <class T> pair <const T&,const T&> minmax (const T& a, const T& b); |
| custom (2) |
template <class T, class Compare> pair <const T&,const T&> minmax (const T& a, const T& b, Compare comp); |
| 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); |
該函數返回一個pair,該pair的first元素的值為a,b中的最小值,second元素的值為a.b中的最大值。
使用operator<進行比較。
如果a=b,那麼將返回make_pair(a,b).
對於(3),返回初始化列表中的最小最大值的pair,如果最值多於一個,firstf返回的是第一個出現的最小值,second返回的是最後一個出現的最大值。
其行為類似於:
template <class T> pair <const T&,const T&> minmax (const T& a, const T& b) { return (b<a) ? std::make_pair(b,a) : std::make_pair(a,b);}一個簡單的例子:
#include <iostream>#include <algorithm>#include <vector>using namespace std;void minmax2(){ auto it=minmax(20,10); cout<<" auto it=minmax(20,10)"<<endl; cout<<"it.first()="<<it.first<<" ,it.second="<<it.second<<endl; auto it2=minmax({2,3,5,7,1,3,1}); cout<<"auto it2=minmax({2,3,5,7,1,3,1})"<<endl; cout<<"it2.first()="<<it2.first<<" ,it2.second="<<it2.second<<endl;}運行:
minmax_element原型:
std::minmax_element
| 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); |
該函數是返回指定範圍內的最大最小值的元素的迭代器組成的一個pair,如果最值多於一個,firstf返回的是第一個出現的最小值的迭代器,second返回的是最後一個出現的最大值的迭代器。
使用operator<進行比較。
一個簡單的例子:
#include <iostream>#include <algorithm>#include <vector>using namespace std;void minmaxelement(){ vector<int> vi{3,5,4,1,3,1,9,9,5}; cout<<"vi="; for(int i:vi) cout<<i<<" "; cout<<endl; auto it=minmax_element(vi.begin(),vi.end()); cout<<" auto it=minmax_element(vi.begin(),vi.end())"<<endl; cout<<"*it.first="<<*it.first<<" ,*it.second="<<*it.second<<endl; cout<<"*(it.first-1)="<<*(it.first-1)<<" ,*(it.second-1)="<<*(it.second-1)<<endl;}運行:可以看出,firstf返回的是第一個出現的最小值的迭代器,second返回的是最後一個出現的最大值的迭代器。
——————————————————————————————————————————————————————————————————
//寫的錯誤或者不好的地方請多多指導,可以在下面留言或者點擊左上方郵件地址給我發郵件,指出我的錯誤以及不足,以便我修改,更好的分享給大家,謝謝。
轉載請註明出處:http://blog.csdn.net/qq844352155
author:天下無雙
Email:coderguang@gmail.com
2014-9-18
於GDUT
——————————————————————————————————————————————————————————————————
1 編寫程式使用分治演算法MINMAX解數組的最小值與最大值,並用實際數組對數組進行測試 2 要演算法中
#include <stdio.h>
void minmax(int array[], int begin, int end, int &min, int &max, int &count)
{
int mid = (begin + end)/2;
if (begin == end)
{
count++;
if (array[mid] < min) {
min = array[mid];
} else {
if (array[mid] > max)
max = array[mid];
count++;
}
return;
}
minmax(array, begin, mid, min ,max, count);
minmax(array, mid + 1, end, min ,max, count);
}
void main()
{
int array[10] = {9,8,7,6,5,4,3,2,1,0};
int min = array[0], max = -1, count = 0;
minmax(array, 0,9,min,max,count);
printf("min = %d, max = %d, count = %d\n", min,max,count);
}