STL 常用算法

函数对象

重载函数调用操作符的类,其对象常称为函数对象(function object),既他们是行为类似函数的对象,也叫仿函数(functor),其实就是重载“()”操作符,使得类对象可以像函数那样调用。

函数对象还可以作为参数传递。

  1. 函数对象通常不定义构造函数和析构函数,避免了函数调用的运行时问题

  2. 函数对象超出了普通函数的概念,内部可以保存状态(定义变量等)。

  3. 函数对象可内联编译,性能好。用函数指针几乎不可能

  4. 模板函数对象使函数对象具有通用性,这也是他的优势之一

谓词

谓词是指普通函数或者重载operator()返回值是bool的函数对象(仿函数)。如果接受一个参数就称之为一元谓词,两个参数就是二元谓词。

find_if算法
vector<int> v;
...// 插入数据

class GreaterThan20 {
public:
  bool operator(int val) {
        return val > 20;
    }
};
// 第三个参数是函数对象
vector<int>::iterator pos = find_if(v.begin(), v.end(), GreaterThan20());
if (pos != v.end()) {
    cout << "find val bigger than 20:" << *pos << endl;
}

// 匿名函数 lambda表达式 [标识符](参数){实现};

内建函数对象

适配器

遍历算法

算法主要由头文件 组成

是所有的STL头文件中最大的一个,常用功能包含:比较,交换,查找,遍历,复制,修改,反转,排序,合并等

体积很小,只包含了几个序列容器上进行简单运算的模板函数

定义了一些模板类,用于声明函数对象

查找算法

常用排序算法

常用集合算法

常用的拷贝和替换算法

常用算术生成算法

Last updated

Was this helpful?