STL算法(Algorithms):极值

来源:互联网 发布:完美芦荟胶淘宝 编辑:程序博客网 时间:2024/05/01 10:13
STL算法(Algorithms):极值
1、min:返回两个两个参数中的最小值
原型:template <class T> const T& min ( const T& a, const T& b );
template <class T, class Compare>
  const T& min ( const T& a, const T& b, Compare comp );
示例:
// min example
#include <iostream>
#include <algorithm>
using namespace std;

int main () {
cout << "min(1,2)==" << min(1,2) << endl;
  cout << "min(2,1)==" << min(2,1) << endl;
  cout << "min('a','z')==" << min('a','z') << endl;
  cout << "min(3.14,2.72)==" << min(3.14,2.72) << endl;
  return 0;
}
2、max:返回两个参数中的大值
原型:
template <class T> const T& max ( const T& a, const T& b );
template <class T, class Compare>
  const T& max ( const T& a, const T& b, Compare comp );
示例:
// max example
#include <iostream>
#include <algorithm>
using namespace std;

int main () { cout << "max(1,2)==" << max(1,2) << endl;
  cout << "max(2,1)==" << max(2,1) << endl;
  cout << "max('a','z')==" << max('a','z') << endl;
  cout << "max(3.14,2.73)==" << max(3.14,2.73) << endl;
  return 0;
}
3、min_element:返回(迭代器)指定范围内的最小元素
原型:
// min_element/max_element
#include <iostream>
#include <algorithm>
using namespace std;

bool myfn(int i, int j) { return i<j; }

struct myclass {
  bool operator() (int i,int j) { return i<j; }
} myobj;

int main () {
  int myints[] = {3,7,2,5,6,4,9};

  // using default comparison:
  cout << "The smallest element is " << *min_element(myints,myints+7) << endl;
  cout << "The largest element is " << *max_element(myints,myints+7) << endl;

  // using function myfn as comp:
  cout << "The smallest element is " << *min_element(myints,myints+7,myfn) << endl;
  cout << "The largest element is " << *max_element(myints,myints+7,myfn) << endl;

  // using object myobj as comp:
  cout << "The smallest element is " << *min_element(myints,myints+7,myobj) << endl; cout << "The largest element is " << *max_element(myints,myints+7,myobj) << endl;

  return 0;
}
4、max_element:返回(迭代器)指定范围内的最小元素
原型:
template <class ForwardIterator>
  ForwardIterator max_element ( ForwardIterator first, ForwardIterator last );

template <class ForwardIterator, class Compare>
  ForwardIterator max_element ( ForwardIterator first, ForwardIterator last,
                                Compare comp );
示例:
// min_element/max_element
#include <iostream>
#include <algorithm>
using namespace std;

bool myfn(int i, int j) { return i<j; }

struct myclass {
  bool operator() (int i,int j) { return i<j; }
} myobj;

int main () {
  int myints[] = {3,7,2,5,6,4,9};

  // using default comparison:
  cout << "The smallest element is " << *min_element(myints,myints+7) << endl;
  cout << "The largest element is " << *max_element(myints,myints+7) << endl;

  // using function myfn as comp:
  cout << "The smallest element is " << *min_element(myints,myints+7,myfn) << endl;
  cout << "The largest element is " << *max_element(myints,myints+7,myfn) << endl;

  // using object myobj as comp:
  cout << "The smallest element is " << *min_element(myints,myints+7,myobj) << endl; cout << "The largest element is " << *max_element(myints,myints+7,myobj) << endl;

  return 0;
}
5、next_permutation:返回的是(序列中所有元素组合中的)一个
原型:
template <class BidirectionalIterator>
  bool next_permutation (BidirectionalIterator first,
                         BidirectionalIterator last );

template <class BidirectionalIterator, class Compare>
  bool next_permutation (BidirectionalIterator first,
                         BidirectionalIterator last, Compare comp);
示例:
// next_permutation#include <iostream>#include <algorithm>using namespace std;int main () {  int myints[] = {1,2,3};  cout << "The 3! possible permutations with 3 elements:\n";  sort (myints,myints+3);  do {    cout << myints[0] << " " << myints[1] << " " << myints[2] << endl;  } while ( next_permutation (myints,myints+3) );  return 0;}6、prev_permutation:和next_permutation功能类似,返回的是序列中(所有元素)前一个组合原型:
<algorithm>
template <class BidirectionalIterator>  bool prev_permutation (BidirectionalIterator first,                         BidirectionalIterator last );template <class BidirectionalIterator, class Compare>  bool prev_permutation (BidirectionalIterator first,                         BidirectionalIterator last, Compare comp);
示例:
// prev_permutation#include <iostream>#include <algorithm>using namespace std;int main () {  int myints[] = {1,2,3};  cout << "The 3! possible permutations with 3 elements:\n";  sort (myints,myints+3);  reverse (myints,myints+3);  do {    cout << myints[0] << " " << myints[1] << " " << myints[2] << endl;  } while ( prev_permutation (myints,myints+3) );  return 0;}7、lexicographical_compare:字典比较(针对的是两个序列,返回的是布尔值)原型:template <class InputIterator1, class InputIterator2>bool lexicographical_compare ( InputIterator1 first1, InputIterator1 last1,
                                 InputIterator2 first2, InputIterator2 last2 );
template <class InputIterator1, class InputIterator2, class Compare>
  bool lexicographical_compare ( InputIterator1 first1, InputIterator1 last1,
                                 InputIterator2 first2, InputIterator2 last2,
                                 Compare comp );示例:// lexicographical_compare example#include <iostream>#include <algorithm>#include <cctype>using namespace std;// a case-insensitive comparison function:bool mycomp (char c1, char c2){ return tolower(c1)<tolower(c2); }int main () {  char first[]="Apple";         // 5 letters  char second[]="apartment";    // 9 letters  cout << "Using default comparison (operator<): ";  if (lexicographical_compare(first,first+5,second,second+9))    cout << first << " is less than " << second << endl;  else    if (lexicographical_compare(second,second+9,first,first+5))      cout << first << " is greater than " << second << endl;  else    cout << first << " and " << second << " are equivalent\n";  cout << "Using mycomp as comparison object: ";  if (lexicographical_compare(first,first+5,second,second+9,mycomp))    cout << first << " is less than " << second << endl;  else    if (lexicographical_compare(second,second+9,first,first+5,mycomp))      cout << first << " is greater than " << second << endl;  else    cout << first << " and " << second << " are equivalent\n";  return 0;}

原创粉丝点击