C++迭代器,函数对象,适配器,包装器

发布于:2023-01-12 ⋅ 阅读:(474) ⋅ 点赞:(0)

迭代器本质:访问容器的工具,本质是类中类的对象模仿指针的行为
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>  //逻辑非
适配器:



包装器:


 

 

 

 

 

 


 

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到