Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / C++STL:流迭代器

流迭代器是一种迭代器适配器。istream_iterator用于读取输入流,ostream_iterator用于写输出流。这些迭代器将它们所对应的流视为特定类型的元素序列。使用流迭代器时,可以用泛型算法从流对象中读数据或将数据写入到流对象中。流迭代器的构造函数如下:流迭代器的基本操作如下:1、流迭代器的定义。流迭代器都是类模板:任何已定义输入操作符(>>操作符)的类型都可以定义istream_iterator,任何已定义输出操作符(<<操作符)的类型都可以定义ostream_iterator。istream_iterator<int> cin_it(cin);            //从cin读取int型数据
istream_iterator<int> end_of_stream;            //指向超出末端位置ofstream outfile;
ostream_iterator<int> output(outfile, " ");注意:(1)在创建流迭代器时,必须指定迭代器所读写的对象类型。(2)ostream_iterator不提供超出末端迭代器。(3)创建ostream_iterator对象时,可提供第二个(可选的)实参,指定将元素写入输出流时使用的分隔符。分隔符必须是C风格字符串,所以必须以空字符结束,否则其行为是未定义的。2、istream_iterator对象上的操作。提供了输入操作符(>>)的任何类型都可以创建istream_iterator对象。构造与流绑定在一起的istream_iterator对象时,将对迭代器定位到第一个值。下面有两段程序是等价的:/*程序1*/
istream_iterator<int> in_iter(cin);
istream_iterator<int> eof;
vector<int> vec;while (in_iter != eof)
{
    vec.push_back(*in_iter++);
}/*程序2*/
istream_iterator<int> in_iter1(cin);
istream_iterator<int> eof1;
vector<int> vec(in_iter1, eof1);程序1从cin中读取int型数据,并将读入的内容保存到vec中。当输入非int型数值或到达文件结束停止。程序2用一对标记元素范围的迭代器构造vec对象,效果与程序1相同。3、ostream_iterator对象上的操作。可用ostream_iterator对象将一个值序列写入流中。ostream_iterator<string> out_iter(cout, " ");
istream_iterator<string> in_iter(cin), eof;while (in_iter != eof)
{
    *out_iter++ = *in_iter++;
}4、流迭代器的限制。(1)不可能从ostream_iterator对象读入,也不可能写到istream_iterator对象中。(2)一旦给ostream_iterator对象赋了一个值,写入就提交了。赋值后,没有办法再改变这个值。此外,ostream_iterator对象中每个不同的值都只能正好输出一次。(3)ostream_iterator没有->操作。5、与算法一起使用流迭代器。算法是基于迭代器操作实现的。由于流迭代器支持迭代器操作,因此至少可在一些泛型算法上使用这类迭代器。 1 #include <iostream>
 2 #include <iterator>
 3 #include <vector>
 4 #include <string>
 5 #include <algorithm>
 6 using namespace std;
 7
 8 int main(void)
 9 {
10   istream_iterator<int> cin_it(cin);
11   istream_iterator<int> end_of_stream;
12
13   vector<int> vec(cin_it, end_of_stream);
14   sort(vec.begin(), vec.end());
15   
16   ostream_iterator<int> output(cout, " ");
17   unique_copy(vec.begin(), vec.end(), output);
18   cout << endl;
19
20   return 0;
21 }输出结果为:------------------------------分割线------------------------------C++ Primer Plus 第6版 中文版 清晰有书签PDF+源代码 http://www.linuxidc.com/Linux/2014-05/101227.htm读C++ Primer 之构造函数陷阱 http://www.linuxidc.com/Linux/2011-08/40176.htm读C++ Primer 之智能指针 http://www.linuxidc.com/Linux/2011-08/40177.htm读C++ Primer 之句柄类 http://www.linuxidc.com/Linux/2011-08/40175.htm将C语言梳理一下,分布在以下10个章节中:
  1. Linux-C成长之路(一):Linux下C编程概要 http://www.linuxidc.com/Linux/2014-05/101242.htm
  2. Linux-C成长之路(二):基本数据类型 http://www.linuxidc.com/Linux/2014-05/101242p2.htm
  3. Linux-C成长之路(三):基本IO函数操作 http://www.linuxidc.com/Linux/2014-05/101242p3.htm
  4. Linux-C成长之路(四):运算符 http://www.linuxidc.com/Linux/2014-05/101242p4.htm
  5. Linux-C成长之路(五):控制流 http://www.linuxidc.com/Linux/2014-05/101242p5.htm
  6. Linux-C成长之路(六):函数要义 http://www.linuxidc.com/Linux/2014-05/101242p6.htm
  7. Linux-C成长之路(七):数组与指针 http://www.linuxidc.com/Linux/2014-05/101242p7.htm
  8. Linux-C成长之路(八):存储类,动态内存 http://www.linuxidc.com/Linux/2014-05/101242p8.htm
  9. Linux-C成长之路(九):复合数据类型 http://www.linuxidc.com/Linux/2014-05/101242p9.htm
  10. Linux-C成长之路(十):其他高级议题
本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-02/113455.htm