流迭代器

来源:互联网 发布:jdbc oracle 的java 编辑:程序博客网 时间:2024/06/12 09:42

流迭代器

  • 流迭代器是标准模板库STL中的,是类模板,流迭代器实例化之后即可以和任何接受对应迭代器的函数一起使用(可以将流看做一个容器,把数据存储在一个连续的缓冲区中,具有迭代器的功能和类似使用)
  • istream_iterator 和ostream_iterator都在<iterator>头文件的定义中。
  • 提供了输入操作符(>>)和 输出操作符 (<<)的任何类型都可以创建 istream_iterator 对象和ostream_iterator对象,即对自己的类重载了这两个函数:istream& operator >> (istream &is, &MyClass c); 和 ostream& operator << (ostream &os , const  &MyClass c);

ostream_iterator为输出流迭代器,也为类模板。为定义输出流迭代器,必指定输出对象的类型。这个类的构造函数有两个参数:输出迭代器指向的ostream对象 和 表示输出对象之间分隔符的string值。因此可以像下面一样创建迭代器对象(即类模板实例化):

  • ostream_iterator<int>(cout, "/n");——用于直接使用输出流迭代器
  • ostream_iterator<int> out_Iterator (cout, "/n");——使用指针out_Iterator即可
istream_iterator为输入流迭代器。为定义输出流迭代器,必指定输出对象的类型。这个类的构造函数只有一个参数:输入迭代器指向的istream对象。实例化输入流迭代器:
  • istream_iterator<int>(cin);——直接使用
  • istream_iterator<int> in_iterator(cin);——使用指针名
#include<vector>#include<algorithm>#include<iostream>#include<iterator>using namespace std;void main(){vector<int> ivec;ivec.push_back(1);ivec.push_back(2);ivec.push_back(3);//给输出流指针命名为out再使用/*ostream_iterator<int> out(cout, "  ");copy(ivec.begin(), ivec.end(), out);*///直接使用输出流copy(ivec.begin(), ivec.end(), ostream_iterator<int> (cout, "  "));cout;}


注意:输入迭代器参数为空时(参考:http://blog.csdn.net/fdl19881/article/details/6685744)
  • 使用copy(istream_iterator<int>(cin),istream_iterator<int>(),back_inserter(ivec));将输入依次加入容器末尾,并以文件结束符或者非int类型值结束。
  • 由以下程序可以看到,每次解引用输出迭代器之后,迭代器都会自动加1。
#include<iostream>#include<iterator>using namespace std;void main(){ostream_iterator<int> out(cout, "  ");*out = 1;*out = 2;out;}