流迭代器适配器,指的是将输入输出流当作迭代器来使用,分两种:istream_iterator用于写入流对象;ostream_iterator用于读取流对象。流迭代器的目的是让流对象适配容器,桥接算法以实现声明式的数据管理通道。那什么是流对象呢?读者可能还不熟悉这个名词。其实,我们从一开始接触编程的时候就学过流对象了!读者还记得”cout<<"Hello World!";“吗,这里我们就使用了流对象cout,它属于基本输入输出流,而后续我们也学习到了文件流对象——ifstream/ofstream这两个文件流对象。而流迭代器的作用就是我们可以通过”*it“的方式实现“cout <<"*it" ;”。那我们就通过代码来具体学习istream_iterator和ostream_iterator流迭代器吧!

#include<iostream>
#include<iterator>//必须包含!
#include<vector>
/*istream_iterator和ostream_iterator流迭代器适配器*/
using namespace std;
void test()
{
/*ostream_iterator 读取*/
vector<int> v{1,2,3,4,5};
ostream_iterator<int> out(cout," ");
for(int a:v) 
{
*out = a;
}
cout<< '\n' ;
/*istream_iterator 写入*/
v.clear() ;//清空容器
cout << "分别输入1、2、3、4、5后通过输入流迭代器写入vector容器\n";
istream_iterator<int> in(cin);
istream_iterator<int> end;//该变量用来结束循环,切勿使用while(1)避免未定义行为! 
/*可手动输入EOF结束写入行为*/ 
/*或者:windows-ctrl+Z+enter   Mac/Linux-ctrl+D   (两者通过组合键表示终止输入符)*/
 
while(in!=end)
{
v.push_back(*in) ;
++in;
}
cout << "遍历vector容器:";
for(int a:v) 
{
*out = a;
}
cout <<'\n' ;
}
int main(){
    system("title dotcpp.com");
    test();
    return 0;
}

编译结果如下:

流迭代器适配器

可以看到输出完全符合我们的指令!

总结:我们可以通过流迭代器适配器实现输入输出的效果。读者千万别认为是它是“轮子里面造轮子”,相反,它提供了一个抽象层供我们的容器和算法使用,对容器操作流对象具有重要意义。

点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)