10泛型算法
10.1概述
泛型算法不能改变容器的大小,依赖于元素类型的操作。
10.2初识泛型算法
10.2.1只读算法
find
10.2.2写容器元素的算法
fill
back_inserter
10.2.3重排容器元素的算法
sort, unique
10.3定制操作
10.3.1想算法传递函数
谓词:是一个可调用的表达式,其返回结果是一个能用作条件的值(即返回作为条件去判断)。
一元谓词接受单一参数,二元谓词两个。接受谓词参数的算法元素类型必须能转换成谓词的参数类型。
10.3.2lambda
可调用类型有:函数,函数指针,lambda表达式,重载了函数调用运算符的类。
向lambda传递参数
Lambda不能有默认参数,调用的实参数目永远与形参数目相等。
使用捕获列表
10.3.3lambda捕获和返回
值捕获
值捕获的前提是变量可以拷贝,与参数不同,被捕获的变量的值是在lambda创建时拷贝,而不是调用时拷贝。
引用捕获
必须保证被引用的对象在lambda执行的时候是存在的。
隐式捕获
编译器可以推断捕获列表,但要在列表中加&或=,&表引用,=表值。
可以混合使用隐式捕获和显式捕获。但第一个元素必须是隐式的。
可变lambda
希望改变一个捕获的值,加关键字mutable
指定lambda的返回类型
必须尾置返回类型
10.3.4参数绑定bind
头文件functional, 命名空间在std::placeholders
例:f(a, b, c, d, e);
Auto g=bind(f, a, b, _2, d, _1);
g(X, Y);等价于f(a, b, Y, d, X);
10.4再探迭代器
10.4.1插入迭代器
10.4.2iostream迭代器
Iostream_iterator操作
Ostream_iterator操作
10.4.3反向迭代器
rbegin,rend, crbegin, crend
除了forward_list外其他容器都支持。
反向迭代器与正常的顺序是相反的,也有++,--但与正常相反
用base()获得正常的迭代器。
10.5泛型算法结构
10.5.1 5类迭代器
10.5.2算法形参模式
Dest表示算法可以写入目的位置的迭代器
10.5.3算法命名规范
10.6特定容器算法