流迭代器
虽然 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 定义为空的迭代器对象,用作结束迭代器。绑定流上的迭代器在遇到文件结束或某个错误时,将等于结束迭代器的值。
#include<iostream>
#include<vector>
using namespace std;
#include<iterator>
int main()
{
istream_iterator<int> cin_it(cin);
istream_iterator<int> end_of_stream;
vector<int> vec;
while(cin_it!=end_of_stream)
{
//注意++先引用后增值,不能写出前缀
vec.push_back(*cin_it++);
}
return 0;
}
• 不可能从 ostream_iterator 对象读入,也不可能写到istream_iterator 对象中。
• 一旦给 ostream_iterator 对象赋了一个值,写入就提交了。赋值后,没有办法再改变这个值。此外,ostream_iterator 对象中每个不同的值都只能正好输出一次。