C++ Primer 学习笔记_42_STL实践与分析(16)(二)

2014-11-24 12:10:33 · 作者: · 浏览: 1

【注意:】

ostream_iterator对象必须与特定的流绑定在一起。在创建istream_iterator时,可直接将它绑定到一个流上。另一种方法是在创建时不提供实参,则该迭代器指向超出末端位置。ostream_iterator不提供超出末端迭代器。

在创建ostream_iterator对象时,可提供第二个(可选的)实参,指定将元素写入输出流时使用的分隔符。分隔符必须是C风格字符串。因为它是C风格字符串,所以必须以空字符结束;否则,其行为将是未定义的。

2、istream_iterator对象上的操作

构造与流绑定在一起的istream_iterator对象时,将对迭代器定位,以便第一次对该迭代器进行解引用时即可从流中读取第一个值。

    vector
  
    iVec;
    istream_iterator
   
     in_iter(cin); istream_iterator
    
      eof; while (in_iter != eof) { iVec.push_back(*in_iter++); } 
    
   
  

while循环从cin中读取 int型数据,并将读入的内容保存在iVec中。每次循环都检查in_iter是否为 eof。其中eof迭代器定义为空的istream_iterator对象,用作结束迭代器。绑在流上的迭代器在遇到文件结束或某个错误时(如输入的是字符),将等于结束迭代器的值。

    //可以这样重写该程序
    istream_iterator
  
    in_iter(cin);
    istream_iterator
   
     eof; vector
    
      iVec(in_iter,eof);
    
   
  

这里,用一对标记元素范围的迭代器构造vector对象。这些迭代器是istream_iterator对象,这就意味着这段范围的元素是通过读取所关联的流来获得的