迭代器#1

迭代器和逆向迭代器的相互转化:

//迭代器转为逆向迭代器,用逆向迭代器的构造函数
deque<int>::iterator it;
deque<int>::reverse_iterator its(it);

//逆向迭代器转化为普通迭代器,使用逆向迭代器的base构造函数
deque<int>::reverse_iterator its;
deque<int>::iterator it=its.base();

每个容器都有一个类级名称,该类级名称定义了该容器所支持的(最高的)迭代器类型。

vector<int>::iterator //随机访问迭代器
list<int>::iterator//双向迭代器

注意:属于该容器的由该类定义的就这一个

但是,头文件<iterator>提供了其他一些的预定义迭代器类型,这些模板类也可以被实例化到具体的容器成为这些容器其它类型的迭代器

比如resverse_iterator

 

为什么还要有插入迭代器呢,不是有插入函数吗

对于每个容器具体的insert,算法仍然是和数据类型相关的。对于处理容器内部的事情,就可以用容器内部的insert,算法高效。但是对于不同容器,不同接口之间呢,难道要每两个就编写一个复制函数吗?

通用函数可以把不同接口连接起来,不用为每两个接口就编写一个函数。这时候就为通用算法传入特定数据类型的迭代器

例如copy(),find(),可以用于stl容器之间,也可以用于stl容器和数组之间。还有容器和输入输出流之间的处理 ostream_iterator istream_iterator。这样一种算法,就可以解决跨接口问题。

 

接下来写一写插入迭代器:

back_insert_iterator;front_insert_iterator;insert_iterator使得允许不同插入的容器都能找到自己合法的插入迭代器。

back_insert_iterator<vector<int>> itb(dice)//构造函数参数必须声明那个容器,必须声明容器类型,原因是迭代器将调用合适的容器方法。
char s[]="today is a good day";
copy(s,s+5,itb)//将某一区间的元素复制到itb上,itb是插入迭代器,将调用容器自己的方法把信息插入。

 

posted @ 2021-03-29 20:16  Macondo's  阅读(54)  评论(0)    收藏  举报