第十章 泛型算法
算法分类
只读算法:前两个实参往往是两个迭代器
写操作算法
这类算法不检查写操作
back_iterator是一个插入迭代器,通过该迭代器进行赋值时,会调用push_back函数
重排元素的算法
定制操作
- 向算法传递函数(谓词,即可调用的表达式,其返回结果是一个能用作条件的值)
lambda表达式
- 可调用对象,类似函数和函数指针
- 可以忽略参数列表和返回类型,但是必须有捕获列表和函数体
形参不能有默认初始值
捕获列表表示函数需要捕获的局部变量,通常为空
捕获分为值捕获和引用捕获,可以理解为传入一个常量形参
还有隐式捕获的方式(分别用=和&来表示两种捕获)
指定返回类型时,采用尾置返回类型
lambda表达式的等价效果是定义一个函数,但是当捕获列表不为空时,函数需要添加额外的形参,这在固定形参个数的情况下不可行,因此需要functional库下的bind函数
其中arg_list就类似于捕获列表,不同点在于arg_list中要以‘_n’的形式声明占位符,那几个占位符对应的实参会传递给callable
占位符声明在std::placeholders中
占位符从_1开始,分别对应callable中的第一个形参,第二个。。。
占位符在arg_list中不一定按顺序排列,更重要的是与callable中形参的对应关系
arg_list无法拷贝引用,得使用ref(var),或cref(var)
iostream迭代器
- 不管是istream还是ostream在声明iterator时都需要指明迭代器类型,之后只能传入对应类型的元素
反向迭代器
- 反向迭代器可以调用base成员函数获取正向迭代器
泛型算法结构
迭代器
- Title: 第十章 泛型算法
- Author: Huan Lee
- Created at : 2023-08-20 14:10:47
- Updated at : 2024-02-26 04:53:15
- Link: https://www.mirthfullee.com/2023/08/20/notion-第十章 泛型算法-e9d50fc9/
- License: This work is licensed under CC BY-NC-SA 4.0.