第二十章_STL算法

目录

一、函数对象

 二、谓词

三、内建函数对象

 四、适配器

1.函数对象适配器

​编辑 2.函数指针适配器ptr_fun

  3.成员函数 作为适配器mem_fun_ref

   4.取反适配器

  五、算法

1.常用遍历算法

1.1 for_each遍历算法

 1.2 transform遍历算法

2.常用查找算法

2.1 find算法 

2.2 find_if算法 

2.3 adjacent_find算法 

2.4 binary_search算法 

2.5 count算法 

2.6 count_if算法 

 3.常用排序算法

3.1 merge算法

3.2 sort 算法

3.3 random_shuffle算法

3.4 reverse算法

 4.常用拷贝替换算法

4.1 copy算法

4.2 replace算法

4.3 replace_if算法

4.4 swap算法

5.常用算数生成算法

5.1 accumulate算法

5.2 fill算法

6.常用集合算法

6.1 set_intersection算法

6.2 set_union算法

6.3 set_difference算法


一、函数对象

函数对象定义:重载调用操作符“()”的类,其对象称为函数对象(function object)

  • 函数对象(仿函数)是一个类,不是一个函数。(行为类似函数的对象)
  • 函数对象重载了"()"操作符,使它可以像函数一样调用。

函数对象分类: 如果函数对象 有n个参数 叫 n元函数对象

补充:

(1)函数对象通常不定义构造函数和析构函数。

【所以在构造和析构时不会发生任何问题,避免了函数调用的运行时问题】

(2)函数对象超出普通函数概念,可以有自己的状态。

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

(4)函数模板对象是函数对象,具有通用性。

 二、谓词

谓词: 返回值为bool类型的普通函数或仿函数

有N个参数 叫 N元谓词。

三、内建函数对象

STL内建了一些函数对象,这些仿函数所产生的对象,用法和一般函数完全相同。

 

 四、适配器

为算法提供接口

1.函数对象适配器

 2.函数指针适配器ptr_fun

  3.成员函数 作为适配器mem_fun_ref

   4.取反适配器

 

  五、算法

头文件:#include<algorithm>

【算法的头文件是所有STL头文件中最大的一个】

常用功能:比较、交换、查找、遍历、复制、修改、反转、排序、合并等。

体积很小,只包括在几个序列容器上进行的简单运算的模板函数定了定义了一些模板类,用以声明函数对象。

1.常用遍历算法

1.1 for_each遍历算法

 *附:回调函数可以是函数对象或普通函数,用户可通过回调函数自定义函数运行机制

 1.2 transform遍历算法

*附:此处的回调函数->如果用户不是单纯的想把 前面那个容器区间的元素搬到另外一个容器中,而是把前面那个区间的元素加上/乘于一些数,再搬到另一个容器中时,就需要自定义了。

2.常用查找算法

2.1 find算法 

 

2.2 find_if算法 

 

2.3 adjacent_find算法 

返回第一组相邻的值。

2.4 binary_search算法 

2.5 count算法 

2.6 count_if算法 

 3.常用排序算法

3.1 merge算法

C的空间不会自动开辟,要自己开辟。

AB容器要有序,然后通过指针, AB容器内的元素排序后,合并到C中。 

3.2 sort 算法

3.3 random_shuffle算法

:要设置一个随机数种子,不然每次出现的随机数都是一样的。

3.4 reverse算法

 4.常用拷贝替换算法

4.1 copy算法

4.2 replace算法

 

4.3 replace_if算法

4.4 swap算法

5.常用算数生成算法

5.1 accumulate算法

 :value指 容器元素指累加完后再加value

5.2 fill算法

6.常用集合算法

 

6.1 set_intersection算法

6.2 set_union算法

6.3 set_difference算法

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值