10.5 泛型算法结构
泛型算法是在迭代器上进行操作的,所以每一个算法都需要迭代器提供它所需的操作,按照可读,可写,递增,递减等迭代器操作,算法对迭代器的操作要求可以分为5个类别。
迭代器名字 | 支持的操作 |
---|---|
输入迭代器 | 只读、不写、单遍扫描、只能递增 |
输出迭代器 | 只写不读、单遍扫描,只能递增 |
前向迭代器 | 可读可写;多遍扫描;只能递增 |
双向迭代器 | 可读可写;多遍扫描;可递增递减 |
随机访问迭代器 | 可读可写;多遍扫描;支持全部迭代器运算 |
这里的支持全部迭代器运算就是3.4节迭代器所支持的操作里面的所有操作。
每个算法都会迭代器有着**最低的要求,**如果迭代器不满足最低要求则编译报错。高级别的迭代器支持低级别迭代器的所有操作。
迭代器类型 | 必须支持的操作 | 迭代器举例 |
---|---|---|
输入迭代器 | iter1==iter2;iter1!=iter2;++iter;++iter;*iter(只能出现在赋值运算符右侧),iter->member | istream_iterator |
输出迭代器 | iter++;++iter;*iter(只能用于赋值运算符左侧) | ostream_iterator |
前向迭代器 | 上述两个的所有操作都要有 | forward_list的迭代器 |
双向迭代器 | 输入输出迭代器的操作都需要;–iter;iter– | 除了forward_list之外的所有标准库容器都必须满足双向迭代器的要求 |
随机访问迭代器 | 支持双向迭 |