STL algorithm演算法minmax,minmax_element(36),stlalgorithm

來源:互聯網
上載者:User

STL algorithm演算法minmax,minmax_element(36),stlalgorithm

minmax原型:

std::minmax
  • C++11
  • C++14
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);
}
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.