迭代器本质:访问容器的工具,本质是类中类的对象模仿指针的行为
1.分类
1.1 正向迭代器
容器名::iterator iter
begin() end()
1.2反向迭代器
容器名::reverse_iterator iter
rbegin() rend()
1.3常正向迭代器
容器名::const_iterator iter
cbegin() cend()
1.4常反向迭代器
容器名::const_reverse_iterator iter
crbegin() crend()
2.容器中的内置迭代器
array(定长数组) 随机访问
vector(动态数组) 随机访问
deque(双向队列) 随机访问
list(双向链表) 双向
set/multiset(集合) 双向
map/multimap(映射) 双向
stack(栈) 不支持迭代器访问
queue(队列) 不支持迭代器访问
priority_queue(优先队列) 不支持迭代器访问
3.迭代器的辅助函数
3.1advance(iter ,n);负责访问双向迭代器里面的数据
3.2distance(iterator begin, iterator end);//计算之间的距离
3.3iter_swap(iterator first, iterator second);//交换两个元素
函数对象概念:
重载函数调用操作符的类,其对象常称为函数对象
函数对象使用重载的()时,行为类似函数调用,也叫仿函数
本质:
函数对象(仿函数)是一个类,不是一个函数
函数对象使用:
函数对象在使用时,可以像普通函数那样调用,可以有参数,可以有返回值
函数对象超出普通函数的概念,函数对象可以有自己的状态
函数对象可以作为参数传递
谓词概念:
返回bool类型的仿函数称为谓词
如果operator()接受一个参数,那么叫做一元谓词
如果operator()接受两个参数,那么叫做二元谓词
二元谓词:
内建函数对象:
分类:算数仿函数 关系仿函数 逻辑仿函数
用法:这些仿函数所产生的对象,用法和一般函数完全相同
使用内建函数对象,需要引入头文件#include<functional>
仿函数原型:
template<class T> T plus<T> //加法仿函数
template<class T> T minus<T> //减法仿函数
template<class T> T multiplies<T> //乘法仿函数
template<class T> T divides<T> //除法仿函数
template<class T> T modulus<T> //取模仿函数
template<class T> T negate<T> //取反仿函数
template<class T> bool equal_to<T> //等于
template<class T> bool not_equal<T> //不等于
template<class T> bool greater<T> //大于
template<class T> bool greater_equal<T> //大于等于
template<class T> bool less<T> //小于
template<class T> bool less_equal<T> //小于等于
逻辑仿函数:
template<class T> bool logical_and<T> //逻辑与
template<class T> bool logical_or<T> //逻辑或
template<class T> bool logical_not<T> //逻辑非
适配器:
包装器: