C++学习笔记28——泛型算法之iostream迭代器

1,头文件

#include<iterator>
using std::istream_iterator;
using std::ostream_iterator;
流迭代器为类模板。
这类迭代器可与输入输出流绑定在一起,用于迭代遍历所关联的IO流。包括标准输入输出流和文件流。

2,构造函数

istream_iterator<T> in(strm); //创建从输入流strm中读取T类型对象的istream_iterator对象
istream_iterator<T> in;//istream_iterator对象的超出末端迭代器,EOF
ostream_iterator<T> out(strm);//创建从输出流strm中读取T类型对象的ostream_iterator对象
ostream_iterator<T> out(strm, delim);//写入时以delim为分隔符,delim为c风格字符串

流迭代器的操作较少,只有自增、解引用和赋值三个。
除此之外istream_iterator可使用“==”和“!=”操作,通常用来和EOF比较。
istream_iterator不支持比较操作。

任何定义了输入操作符“>>”的类型都可定义istream_iterator,任何定义了输出操作符“<<”的类型都可定义ostream_iterator。
ostream_iterator不提供超出末端迭代器,必须与流绑定在一起,可以为标准输出流或文件流。

3,istream_iterator的用法

istream_iterator<int> cin_it(cin);
istream_iterator<int> cin_end;      // EOF
vector<int> ivec(cin_it, cin_end);  //一定要记住这种用法!
这种写法免除了对循环语句的使用,让ivec不断从输入流中获取int型对象,直到遇到EOF为止。

4,ostream_iterator的用法

// 1文件操作
ofstream odd_file("odd_file.txt");//生成的文件在当前目录,即工程所在的目录
ofstream even_file("even_file.txt");
//检查文件打开是否成功
if((!odd_file) || (!even_file))
{
	cerr << "can't open odd_file or even_file!" << endl;
	return EXIT_FAILURE;

}

// 2读入整数
cout << "请输入一系列的正整数:" << endl;
istream_iterator<int> cin_it(cin);
istream_iterator<int> cin_end;	

// 3使用ostream_iterator写文件
ostream_iterator<int> odd_iter(odd_file," ");
ostream_iterator<int> even_iter(even_file, "\n");
while (cin_it != cin_end)
{
	if (*cin_it % 2 == 0)
	{
		*even_iter++ = *cin_it++;
	}
	else
	{
		*odd_iter++ = *cin_it++;
	}
}
even_file.close();
odd_file.close();
注意:给ostream_iterator对象赋值,就相当于向输出流里写东西。当输出流与文件绑定时,即相当于写文件。
所以一旦赋值就没有办法再修改这个值(总不能重写文件吧。。。)
ostream_iterator没有->操作符。(好奇向文件中写类会怎么样 。。。)

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值