STL之迭代器

除了每个容器定义的迭代器之外,在标准库头文件iterator中还定义了额外几种迭代器

1.插入迭代器

插入迭代器是一种迭代器适配器,它接受一个容器,返回一个迭代器,能实现向容器添加数据

插入迭代器有3中类型,都是返回一个容器的插入迭代器,区别是所插入的位置不同

(1)back_inserter(vec):创建一个使用push_back()向vec容器插入元素的迭代器,永远在尾部插入

(2)front_insterer(vec):创建一个使用push_front()向vec容器插入元素的迭代器,永远在头部插入

(3)inserter(vec,vec.begin()):创建一个使用insert()向vec容器插入元素的迭代器,第二个参数表示一个迭代器,插入到第二个参数指向的元素之前,它和insert(p,x)的区别是:insert(p,x)在p之前插入,并返回指向先添加元素的迭代器,而这里永远在第二个参数之前插入。

2.流迭代器

这些迭代器绑定到输入输出流上,可以读取关联的IO流

(1)istream_iterator<读取类型> 名称(关联流)

例如:istream_iterator<int> myistream(cin)表示从标准输入流(键盘)读取数据的迭代器

istream_iterator<int> eof;表示流的尾后迭代器,可以用这个范围来读取cin中该范围内的数据,对于绑定好流的迭代器,一旦其关联的流遇到文件尾或IO错误,则该迭代器的值就与尾后迭代器相等 

(2)ostream_iterator<读取类型> 名称(关联流,d)

例如:ostream_iterator<int> myostream(cout,"hello!")表示向标准输出流(屏幕)写入数据的迭代器,第二个参数表示每次写入元素之后,在元素末尾加一个“hello”字符串

3.反向迭代器 reverse_iterator

在容器中从尾元素向首元素移动的迭代器,++操作会移动到前一个元素,直到移动到首前元素位置

成员函数:base(vec.crend()):会返回vec.crend()对应的普通迭代器,即vec.cbegin()

posted @ 2015-08-23 15:14  runninglzw  阅读(153)  评论(0编辑  收藏  举报