一、迭代器的应用 。1、三种迭代器

 

1)插入迭代器(insert iterator)迭代器适配器,与容器绑定在一起,实现在容器中插入元素的功能。形参为一个迭代器和一个指向容器的引用。

• back_inserter,创建使用 push_back 实现插入的迭代器,形参为指向容器的引用的迭代器适配器。

• front_inserter,使用 push_front 实现插入。

• inserter,使用 insert 实现插入操作。除了所关联的容器外,inserter还带有第二实参:指向插入起始位置的迭代器。Inserter在它的迭代器实参所指的位置前面插入新元素。

replace_copy (ivec.begin(), ivec.end(), inserter (ilst, it), 100, 0);

2iostream迭代器(iostream iterator)与输入或输出流绑定在一起,用于迭代遍历所关联的 IO 流。

虽然 iostream 类型不是容器,但标准库同样提供了在 iostream 对象上使用的迭代器:istream_iterator 用于读取输入流,而 ostream_iterator 则用于写输出流。这些迭代器将它们所对应的流视为特定类型的元素序列。使用流迭代器时,可以用泛型算法从流对象中读数据(或将数据写到流对象中)。

iostream迭代器的构造函数

istream_iterator<T> in(strm);

创建从输入流strm中读取T类型对象的istream_iterator对象

istream_iterator<T> in;

istream_iterator 对象的超出末端迭代器

ostream_iterator<T> in(strm);

创建将T类型的对象写到输出流strmostream_iterator对象

ostream_iterator<T> in(strm, delim);

创建将 类型的对象写到输出流 strm ostream_iterator 对象,在写入过程中使用 delim作为元素的分隔符。delim 是以空字符结束的字符数组(C风格字符串)。

istream_iterator 的操作

it1 == it2

it1 != it2

比较两上 istream_iterator 对象是否相等(不等)。迭代器读取的必须是相同的类型。如果两个迭代器都是 end 值,则它们相等。对于两个都不指向流结束位置的迭代器,如果它们使用同一个输入流构造,则它们也相等

*it

返回从流中读取的值

it->mem

是 (*it).mem 的同义词。返回从流中读取的对象的 mem 成员

++it

it++

通过使用元素类型提供的 >> 操作从输入流中读取下一个元素值,使迭代器向前移动。通常,前缀版本使用迭代器在流中向前移动,并返回对加 后的迭代器的引用。而后缀版本使迭代器在流中向前移动后,返回原值

1)流迭代器都是类模板:任何已定义输入操作符(>> 操作符)的类型都可以定义istream_iterator。任何已定义输出操作符(<< 操作符)的类型可定义ostream_iterator

 

 
  
  1. #include "set" 
  2. #include "vector" 
  3. #include "string" 
  4. #include "fstream" 
  5. #include "iostream" 
  6. #include "sstream" 
  7. #include "iterator" 
  8. using namespace std; 
  9.   
  10. int main(int argc, char **argv) 
  11.     istream_iterator<int> cin_it(cin); 
  12.     istream_iterator<int> end_of_stream; 
  13.     vector<int> vec; 
  14.     while (cin_it != end_of_stream) 
  15.     { 
  16.         vec.push_back(*cin_it++); 
  17.     } 
  18.     //also could be written like this 
  19.     //istream_iterator<int> cin_it(cin); 
  20.     //istream_iterator<int> end_of_stream; 
  21.     //vector<int> vec(cin_it, end_of_stream); 
  22.     return 0;