stream iterators C++ 用法
来源:互联网 发布:淘宝如何设置全场折扣 编辑:程序博客网 时间:2024/05/08 19:42
流迭代器(Stream Iterators)
1 输出流迭代器(Ostream Iterators)
输出流迭代器可以把指定的内容直接写入指定的ostream。Ostream Iterator的实现原理跟Insert Iterator非常相似,唯一的区别就是Ostream Iterator利用<<输出操作符把值输出到了ostream对象。通过流迭代器,算法就可以使用通用的迭代器接口把相应的内容输出到流对象。
下面列出了Ostream Iterator可以进行的所有操作:
下面是一个使用ostream iterator的例子:
//ostriter.cpp
#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
//create a ostream iterator for cout stream
ostream_iterator<int> iter(cout, "\n");
//write some elements to cout with ostream iterator
*iter = 1;
iter++;
*iter = 2;
iter++;
*iter = 3;
iter++;
//define a vecotr container col1
vector<int> col1;
//insert some elements into col1
for(int i = 1; i <= 9; ++i)
{
col1.push_back(i);
}
//copy all elements of col1 to standard output
copy(col1.begin(), col1.end(), ostream_iterator<int>(cout));
cout << endl;
//copy all elements of col1 to standard output with " < " delim
copy(col1.begin(), col1.end(), ostream_iterator<int>(cout, " < "));
cout << endl;
}
执行结果是:
1
2
3
123456789
1 < 2 < 3 < 4 < 5 < 6 < 7 < 8 < 9 <
2 输入流迭代器(Istream Iterators)
Istream Iterators从一个输入流(Input stream)读取元素,借助输入流迭代器,C++标准库中的算法可以直接从一个流(stream)中读取数据。
在创建一个输入流迭代器时,通常要提供一个输入流(istream)对象来进行初始化,以便从这个流中读取数据,然后就可以使用统一的迭代器接口(Interface)来逐个元素地读取流中的数据了。但是,读取元素的操作可能是会失败的(流结束或者发生错误),并且C++标准库中的很多算法是需要提供迭代器范围(half-open range)来标识元素集合。为了解决这个问题,输入流迭代器特意设计了一个特殊的Istream Iterator: end-of-stream iterator,end-of-stream iterator使用输入流迭代器的缺省构造函数来创建。当使用一个Istream Iterator来读取流时,当读取到达流结尾或者发生了错误读取失败,当前的输入流迭代器都会变成end-of-stream iterator。因此每当进行一次读取后,都应该跟end-of-stream iterator来进行比较以判断下一次读取是否有效。
通常,输入流迭代器的构造函数打开输入流并且读取第一个元素,但是在具体实现上也可能是直到第一次调用*操作符时才读取第一个元素,这依赖于具体的实现。
下面看一个使用输入流迭代器的例子:
//istriter.cpp
#include <iostream>
#include <iterator>
using namespace std;
int main()
{
//create a istream iterator for cin stream object
istream_iterator<int> intReader(cin);
//create a end-of-stream iterator
istream_iterator<int> EndOfReader;
while(intReader != EndOfReader)
{
cout << "once: " << *intReader << endl;
cout << "agine: " << *intReader << endl;
++intReader;
}
}
如果输入是:1 2 3 4 f 5 6那么执行结果是:
once: 1
agine: 1
once: 2
agine: 2
once: 3
agine: 3
once: 4
agine: 4
可以看到字符f终止了输入流的读取,当intReader读取到f时,因为格式错误,intReader变成了end-of-stream iterator,所以循环退出,程序结束。- stream iterators C++ 用法
- stream Iterators(流迭代器)
- iterator adaptors - stream iterators
- C++ stream iterators
- C++/CLI中的Checked Iterators
- Iterators
- Iterators
- iterators
- 使用插入迭代器(inserter)和流迭代器(stream iterators)
- C++stream
- 【C#】System.IO.Stream 中flush的用法
- 【C#】System.IO.Stream 中flush的用法
- c++stl之逆向迭代器 Reverse Iterators
- adodb Stream 详细用法
- adodb.stream的用法
- Stream的用法
- adodb.Stream 详细用法
- Java8中stream用法
- poj1442
- 跟一下wpa_supplicant(3-2) connect AP
- FPGA你必须知道的那些事儿
- 第一部分 基本语言 第二章 变量和基本类型(2.9编写自己的头文件)(预处理器)
- Linux_Java中堆内存与栈内存分配浅析
- stream iterators C++ 用法
- 站长之死:互联网界夹心层的梦想反思录
- JBoss Web和 Tomcat的区别
- STK与VC++ 6.0联合编程
- 【C_C++】根据结构体中的成员地址求结构体的地址
- 按键中断,休眠,唤醒
- POJ 3250 Bad Hair Day
- WPF中ListBox连续选择同一项时SelectionChanged 事件不响应的问题
- wpa_supplicant软件架构分析