第十二章 泛型算法 (下)

再谈迭代器,经过前面的几章节我们对迭代器有了大概的了解,本质上就是一个指针,即指向某一个地址的指针。

1.插入迭代器:这类的迭代器与容器是绑定在一起的,实现在容器中插入元素的功能。主要有三种插入迭代器:

(1)back_inserter()

(2)front_inserter()

(3)inserter(),该操作除了所关联的容器外,还有第二个参数:指向插入的起始位置的迭代器

2.IOstream迭代器:istream_iterator用于读取输入流的迭代器,ostream_iterator用于写输出流的迭代器。标准库中定义了以下几种:(流迭代器之定义了最基本的操作:自增,解引用和赋值)

istream_iterator<T>in(strm);  创建从输入流strm中读取T类型对象的istream_iterator对象

istream_iterator<T>in;  istream_iterator对象的超出末端迭代器

ostream_iterator<T>out(strm);   创建将T类型的对象写到输出流strm的ostream_iterator对象 

ostream_iterator<T>ouy(strm,delim);   创建将T类型的对象写到输出流strm的ostream_iterator对象,在写入过程中使用delim作为元素的分隔符。

如:istream_iterator<int>cin_iter(cin) ;从cin流中读入整数,即将输入迭代器绑定到输入流中

istream_iterator<int>end_iter; 读取迭代器的结束值

ofstream  outfile;//定义一个文件流outfile

ostream_iterator<string>output(outfile," ");//将写如迭代器绑定到写文件流中

或者 ostream_iterator<string>output(cout," ");//将写如迭代器绑定到输出流中

3.方向迭代器:这个迭代器应该是比较熟悉的,在顺序容器一章就已经接触了。

V<T>::reverser_iterator iter=V.rbegin();iter!=V.rend();++iter

3.1 const迭代器:定义const迭代器的目的是因为我们不希望使用这个迭代器来修改容器中的元素。

4.容器特有的算法:前面讲到的一些算法不仅仅是适用于容器,也可以使用与其他的类型。然而标准库当中为容器定义了一些特有的算法:

主要有:(注意他们的调用方式,以下是list容器特有的算法,也有些算法也适合与其他的容器

lst.merge(lst2)

lst.merge(lst2,comp)  将lst2的元素合并到lst中,这两个list容器对象必须先排序才能合并。返回void类型。合并之后lst2为空。

lst.remove(val)

lst.remove_if(unarypred) 调用lst.erase删除所有等于指定值或者指定的谓词函数返回非零值的元素。返回void类型。

lst.reveser();反向排序lst中的元素

lst.sort(); 对lst中的元素排序

lst.splice(iter,lst2)  第一个版本是将lst2中所有元素移到lst中,lst2为空。

lst.splice(iter,lst2,iter2)  iter2用来指定lst2中需要移动的元素,这个操作只移动一个元素

lst.splice(iter,beg,end)  将lst2的元素移到lst中迭代器iter指向的元素前面,并将在lst2中删除移出的元素。

lst.unique()

lst.unique(binarypred)  调用erase删除同一个只的连续副本,第一个版本用==操作符来判断元素是否相等,第二个版本是用谓词函数来实现判断

原文地址:https://www.cnblogs.com/ljy2013/p/3313596.html