第10章 泛型算法
2022/7/11 1:22:33
本文主要是介绍第10章 泛型算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录- 10 泛型算法
- 10.1 概述
- 10.2 初识泛型算法
- 10.2.1 只读算法
10 泛型算法
c++标准库容器本身的函数很少, 相反c++提供了一组算法, 这些算法可以(通过操作迭代器来)处理容器(比如查找元素, 排序, 等).
这些算法可以用于不同的容器和不同类型的元素, 所以它们是"通用的(generic)"或称"泛型的".
这些算法被称为"泛型算法".
10.1 概述
大多数算法定义在头文件algorithm中, 使用它们之前要#include .
另外头文件numeric中还定义了一组数值泛型算法.
算法并不直接操作容器, 而是遍历(由两个迭代器指定的)元素范围. 比如:
#include <algorithm> auto result = std::find(vec.cbegin(), vec.cend(), val);
由于算法操作迭代器, 而不操作容器, 所以算法不依赖于容器.
由于算法要操作容器中的元素, 所以算法依赖于元素类型允许的操作.
算法永远不会执行容器的操作, 它只会运行于迭代器之上.
带来一个编程假定: 算法不会改变底层容器的大小.
10.2 初识泛型算法
标准库提供了超过100种算法, 这些算法有一致的结构.
大部分算法都对一个范围内的元素进行操作, 这个范围称为"输入范围".
这类算法总是使用前两个参数来表示此范围.
10.2.1 只读算法
只读取输入范围内的元素, 而不改变元素. 比如find, count, accumulate(定义在头文件numeric中).
只读算法的前两个参数最好使用cbegin()和cend().
accumulate执行累加操作, 第三个参数是初始值, 它的类型决定了使用哪个加法运算符以及返回值的类型.
比如要对string类型的元素累加, 则第三个参数类型必须是string, 不能是字符串直接量.
equal算法用于确定两个序列是否保存相同的值, 特殊之处在于它操作两个序列.
equal(roster1.cbegin(), roster1.cend(), roster2.cbegin());
第三个参数是第二个序列的首元素.
注意: equal比较的元素不必完全一样, 比如roster1是 vector
注意: equal假定第二个序列至少与第一个序列一样长.
注意: 如果第二个序列比较短, 返回false
[待续]
这篇关于第10章 泛型算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26手写消息中间件:从零开始的指南
- 2024-11-26Java语音识别项目资料:新手入门教程
- 2024-11-26JAVA语音识别项目资料:新手入门教程
- 2024-11-26Java语音识别项目资料:入门与实践指南
- 2024-11-26Java云原生资料入门教程
- 2024-11-26Java云原生资料入门教程
- 2024-11-26Java云原生资料:新手入门教程
- 2024-11-25Java创意资料:新手入门的创意学习指南
- 2024-11-25JAVA对接阿里云智能语音服务资料详解:新手入门指南
- 2024-11-25Java对接阿里云智能语音服务资料详解