STL 算法 概要

  • 算法
  • 函数对象(function objects)
  • 函数适配器(function adapters)
#include<algorithm>
#include<numeric>
#include<functional>

函数对象

如何使用函数对象

//下面为使用函数对象的例子
//set是自动排序的红黑树
//less<type>()是预定义的函数对象
set<int> a;		//默认为less<int>
set<int, less<int> > b;	//同a,也是自动从小到大排序
set<int, greater<int> > c;	//采用从大到小排序

函数对象与算法进行结合

for_each()实际上是一个函数,向它传两个迭代器,第三个参数可以是函数或函数对象。它会对两个迭代器之间的数据用这个函数或函数对象来处理。

void print(int elem){
      cout<<elem;
}

vector<int> vec;
for(int i=0;i<9;i++)
      vec.push_back(i);
for_each(vec.begin,vec.end(),print)

如何定义函数对象

函数对象实际上是一个类,为了把它做成函数对象,就必须有一个名为operator的成员函数,这样我们使用起来就像一个函数。它利用构造函数创建一个临时的对象,调用的时候是自动调用operator这个方法。

最大最小值算法

最大最小值算法一共有4个,可以用在所有的容器当中,函数返回值为迭代器:

min_element(b,e);
min_element(b,e,op);
max_element(b,e);
max_element(b,e,op);

以下为使用deque做例子:

#include<iostream>
#include<algorithm>
#include<deque>

using namespace std;

int main(){
	deque<int> deq;
	for(int i=2;i<=8;i++){
		deq.insert(deq.end(),i);
	}
	for(int i=-3;i<=5;i++){
		deq.insert(deq.end(),i);
	}
	cout<<"最小值为 :"<<*min_element(deq.begin(),deq.end())<<endl;
	cout<<"最大值为 :"<<*max_element(deq.begin(),deq.end())<<endl;
}