函数对象
概念和使用
- 切记:仿函数,本质是一个类
- 因为是一个类,所以要把
operator()放在一个类里面


像普通函数(需要通过某个类使用)一样使用,并且有返回值:
内置当前函数对象的状态:
函数对象作为参数:
谓词
- 返回值一定是bool型

- 返回值为bool的仿函数:

- 使用方法:可以在
find_if这种期待 bool 值的地方使用
* 以后 看到Pred的形参,就是谓词(仿函数)

- 二原谓词:可以放在排序中使用。这里MyCompare是匿名函数对象


内建函数对象

算数仿函数



关系仿函数


逻辑仿函数


常用算法

遍历
for_each()
transform()搬运一个容器到另一个
* 记得要使用
resize()提前开辟空间
下面传入vTarget.begin,即开始迭代器
查找

find
- **切记:**返回值是:迭代器位置


- 自定义类型:
- 在Person类中重载 == ,才能进行自定义类型比较
- 传入要查找的自定义类型,返回值是迭代器
find_if
-
相比
find可以自定义筛选条件

-
返回:迭代器
-
使用谓词/仿函数
-
内置类型的谓词:

-
自定义类型的谓词:传入类型是Person,


adjacent_find
查找相邻重复元素


binary_search
二分查找

- 内置类型:

count
统计数据的个数

- 内置类型:

- 自定义数据类型
自定义类型,要在Person类型中,添加重载==(下图中忘记添加const Person &p,防止改变原值)

count_if
- 统计满足某个条件的个数
这种 " if ",都要写仿函数,返回bool值来判断
- 仿函数:

- 自定义类型


排序

sort
- 默认升序
这里用的greater,也就是期望前面大于后面

random_shuffle
- 指定范围调换次序



merge
- 合并两个有序容器,合并后也有序


reverse
- 反转指定范围


拷贝和替换

copy


replace


replace_if
带有if的要写谓词

谓词:


swap
- 互换两个容器内部的元素(两个容器类型相同,都是List或者都是Vector)
- 容器大小不同也可以交换


算数生成算法

accumulate
- 自动求和


fill
- 填充某个数值


集合算法

set_intersection
- 必须有序容器

- 开辟较小空间
- 返回值是目标容器的End
- 用目标End作为结束

set_union


set_difference








* 记得要使用






















