当前课程知识点:C++语言程序设计进阶 > 第十章 泛型程序设计与C++标准模板库 > 算法 > 算法
STL算法本身是一种函数模版
通过迭代器获得输入数据
通过函数对象对数据进行处理
通过迭代器将结果输出
STL算法是通用的,独立于具体的数据类型、容器类型
不可变序列算法
可变序列算法
排序和搜索算法
数值算法
不直接修改所操作的容器内容的算法
用于查找指定元素、比较两个序列是否相等、对元素进行计数等
例:
template<class InputIterator, class UnaryPredicate> InputIterator find_if(InputIterator first, InputIterator last, UnaryPredicate pred);
查找[first, last)区间内pred(x)为真的首个元素
可以修改它们所操作的容器对象
包括对序列进行复制、删除、替换、倒序、旋转、交换、分割、去重、填充、洗牌的算法及生成一个序列的算法
例:
template<class ForwardIterator, class T> InputIterator find_if(ForwardIterator first, ForwardIterator last, const T& x);
将[first, last)区间内的元素全部改写为x。
对序列进行排序
对两有序序列进行合并
对有序序列进行搜索
有序序列的集合操作
堆算法
例:
template <class RandomAccessIterator , class UnaryPredicate> void sort(RandomAccessIterator first, RandomAccessIterator last, UnaryPredicate comp);
以函数对象comp为“<”,对 [first, last)区间内的数据进行排序
求序列中元素的“和”、部分“和”、相邻元素的“差”或两序列的内积
求“和”的“+”、求“差”的“-”以及求内积的“+”和“·”都可由函数对象指定
例:
template<class InputIterator, class OutputIterator, class BinaryFunction> OutputIterator partial_sum(InputIterator first, InputIterator last, OutputIterator result, BinaryFunction op);
对[first, last)内的元素求部分“和”(所谓部分“和”,是一个长度与输入序列相同的序列,其第n项为输入序列前n个元素的“和”),以函数对象op为“+”运算符,结果通过result输出,返回的迭代器指向输出序列最后一个元素的下一个元素
例10-20——例10-23演示了几类算法的应用。
详见教材第10章
大家好
欢迎回来继续学习
C++语言程序设计
这一节我为大家简单介绍一下
STL里面的算法
STL里面的算法
实际上就是一些函数模板
它是通用的
独立于数据类型的
STL算法
都是一些函数模板
可以通过迭代器获得输入数据
通过函数对象
对数据进行处理
最后再通过迭代器将结果输出
STL的算法呢通用
独立于数据类型
独立于容器类型
我们可以将STL的算法
分成这样几类
不可变序列算法
可变序列算法
排序和搜索算法
还有数值算法
不可变序列算法呢
它不直接修改所操作的容器内容
比如说用于查找指定的元素
比较两个序列是否相等
对元素进行计数等等
那这里
给了一个简单的例子呢
就是用于查找
从first到last区间类
这个Pred为真的首个元素
而这个pred是个什么呢
是个一元谓词函数对象
这就是find_if这个算法
它的功能
可变序列算法
可以修改
它们所操作的容器对象
包括对序列进行复制 删除
替换 倒序 旋转 交换
分割 去重 填充 洗牌
以及生成一个序列
这个例子呢
给出了find_if的另外一种用法
用这样的形式
我们可以将
从first到last区间的元素
全部改写为x
排序和搜索算法呢
能够对序列进行排序
对两个有序序列进行合并
对有序序列进行搜索
还有 有序序列的集合操作
还有堆算法
比如说这里举这个例子
这个sort
就以函数对象comp
为小于比较运算的这种功能
这个小于比较运算呢
是由comp函数对象传进来的
用这样的一个小于运算的定义
对于first和last区间的数据
进行了排序
STL里面的数值算法呢
包括求序列中元素的和
部分和 相邻元素的差
或者两个序列的内积
还有求和的+
求差的-
以及求内积的+和点
它们都是由函数对象来指定的
比如说我们在这个例子中
对从first到last这个区间的元素
求部分和
所谓部分和就是
一个长度与输入序列
相同的序列
其中第n项
为输入序列的前n个元素的和
以函数对象
以传进来这个函数对象op
作为加法运算符
所以这个+呢是带引号的+
到底它的含义是什么
根据你传进来的函数对象来决定
那最后的结果呢
要通过result输出
这个操作它的返回值是
返回的迭代器
指向输出序列的最后一个
元素的下一个元素
这一章的教材中的例20
到例23呢
演示了几类算法的应用方法
由于课时的关系呢
我们在这里就不一一为大家讲了
这几个例题逻辑非常简单
大家很容易看懂
那么请大家课后
去看教材里面的例题讲解
-导学
--导学
-继承的基本概念和语法
-第七章 继承与派生--继承的基本概念和语法习题
-继承方式
-第七章 继承与派生--继承方式
-基类与派生类类型转换
-第七章 继承与派生--基类与派生类类型转换
-派生类的构造和析构
--派生类的构造函数
--派生类的析构函数
--第七章 继承与派生--派生类的构造和析构
-派生类成员的标识与访问
--虚基类
-第七章 继承与派生--派生类成员的标识与访问
-小结
--小结
-综合实例
--第七章综合实例
-实验七
--实验七
-导学
--导学
-第八章 多态性--导学
-运算符重载
--运算符重载的规则
-第八章 多态性--运算符重载
-虚函数
--虚函数
--虚析构函数
--虚表与动态绑定
-第八章 多态性--虚函数
-抽象类
--抽象类
--第八章 多态性--抽象类
-override与final
-第八章 多态性--override与final
-小结
--第八章小结
-综合实例
--第八章综合实例
-实验八
--实验八
- 第八章讲义
-导学
--导学
-模板
--函数模板
--类模板
-第九章 模板与群体数据--模板
-线性群体
--线性群体的概念
-第九章 模板与群体数据--线性群体
-数组
--数组类模板
-链表
--链表类模板
-第九章 模板与群体数据--链表
-栈
--栈类模板
--栈类模板课后习题
--例9-9 栈的应用课后习题
-队列
--队列类模板
-第九章 模板与群体数据--队列
-排序
--排序概述
--插入排序
--选择排序
--交换排序
-第九章 模板与群体数据--排序
-查找
--查找
--查找课后习题
-小结
--小结
-综合实例
--综合实例
-实验九
--实验九
- 第九章讲义
-导学
--导学
-泛型程序设计及STL的结构
--STL简介
-第十章 泛型程序设计与C++标准模板库--泛型程序设计及STL的结构
-迭代器
--迭代器
-第十章 泛型程序设计与C++标准模板库--迭代器
-容器的基本功能与分类
-第十章 泛型程序设计与C++标准模板库--容器的基本功能与分类
-顺序容器
--顺序容器的特征
--第十章 泛型程序设计与C++标准模板库--顺序容器
-关联容器
--集合
--映射
-第十章 泛型程序设计与C++标准模板库--关联容器
-函数对象
--函数对象
--函数适配器
-算法
--算法
-小结
--第十章小结
-综合实例
--综合实例
-实验十
--实验十
- 第十章讲义
-导学
--导学
-I/O流的概念及流类库结构
-第十一章 流类库与输入/输出--I/O流的概念及流类库结构
-输出流
--输出流概述
--向文本文件输出
--向二进制文件输出
--向字符串输出
-第十一章 流类库与输入/输出--输出流
-输入流
--输入流概述
--输入流应用举例
--从字符串输入
-第十一章 流类库与输入/输出--输入流
-输入/输出流
--输入/输出流
-第十一章 流类库与输入/输出--输入/输出流
-小结
--小结
-综合实例
--综合实例
-实验十一
--实验十一
- 第十一章讲义
-导学
--第12章导学
-异常处理的思想与程序实现
-第十二章 异常处理--异常处理的思想与程序实现
-异常处理中的构造与析构
-第十二章 异常处理--异常处理中的构造与析构
-标准程序库异常处理
-第十二章 异常处理--标准程序库异常处理
-小结
--第12章小结
-综合实例
--综合实例
-实验十二
--实验十二
- 第十二章讲义