天天看點

C++:STL常用函數子產品總結(算法algorithm)

algorithm

一些已經編好的對一系列元素進行操作的函數集合(如排序,交換,計數等)

1、

std::sort

:具有排序的功能

default (1) 
template <class RandomAccessIterator>
  void sort (RandomAccessIterator first, RandomAccessIterator last);
custom (2)  
template <class RandomAccessIterator, class Compare>
  void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
  //具有兩個重載函數,将在[fisrt,last)範圍内的元素以上升順序排列,預設排序規則使用operator<,在第二個函數中可以通過
  //comp函數來改變排列規則,comp函數接受範圍内的兩個元素,然後傳回一個布爾型值,這個傳回值真假表明
  //接受的第一個元素是否應該在第二個元素前面。這個comp函數不改變範圍内的任何值。           

示例程式:

// sort algorithm example
#include <iostream>     // std::cout
#include <algorithm>    // std::sort
#include <vector>       // std::vector

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

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

int main () {
  int myints[] = {32,71,12,45,26,80,53,33};
  std::vector<int> myvector (myints, myints+8);               // 32 71 12 45 26 80 53 33

  // using default comparison (operator <):
  std::sort (myvector.begin(), myvector.begin()+4);           //(12 32 45 71)26 80 53 33

  // using function as comp
  std::sort (myvector.begin()+4, myvector.end(), myfunction); // 12 32 45 71(26 33 53 80)

  // using object as comp
  std::sort (myvector.begin(), myvector.end(), myobject);     //(12 26 32 33 45 53 71 80)

  // print out content:
  std::cout << "myvector contains:";
  for (std::vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it)
    std::cout << ' ' << *it;
  std::cout << '\n';

  return 0;
}           

繼續閱讀