流迭代器

虽然 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类型的对象写到输出流 strm 的 ostream_iterator 对象
  • ostream_iterator<T> in(strm, delim); 创建将 T 类型的对象写到输出流 strm 的ostream_iterator 对象,在写入过程中使用 delim作为元素的分隔符。

istream_iterator

将输入流的东西输出到 vector,使用 *it 返回从流中读取的值,使用自增使迭代器在流中向前移动。其中end_of_stream 定义为空的迭代器对象,用作结束迭代器。绑定流上的迭代器在遇到文件结束或某个错误时,将等于结束迭代器的值。

  1. #include<iostream>
  2. #include<vector>
  3. using namespace std;
  4. #include<iterator>
  5. int main()
  6. {
  7. istream_iterator<int> cin_it(cin);
  8. istream_iterator<int> end_of_stream;
  9. vector<int> vec;
  10. while(cin_it!=end_of_stream)
  11. {
  12. //注意++先引用后增值,不能写出前缀
  13. vec.push_back(*cin_it++);
  14. }
  15. return 0;
  16. }

• 不可能从 ostream_iterator 对象读入,也不可能写到istream_iterator 对象中。

• 一旦给 ostream_iterator 对象赋了一个值,写入就提交了。赋值后,没有办法再改变这个值。此外,ostream_iterator 对象中每个不同的值都只能正好输出一次。