首页 > 代码库 > C++零碎知识点

C++零碎知识点

流迭代器

2017-05-21 17:05:51

  • 流迭代器是标准模板库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);——使用指针名

 

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

 
 

C++零碎知识点