C++:istreambuf_iterator与istream_iterator的区别

在C++中,流(stream)也可以看做是容器,因而也有相应的iterator来遍历流中的内容,其中就有本文要介绍的两个流迭代器:istreambuf_iterator和istream_iterator,这两个迭代器的用法和区别可以用一下两段代码来体现:

例1:istreambuf_iterator

#include <fstream> 
#include <iostream> 
#include <iterator> 
using namespace std;  
 
int main(){  
 
    ifstream in("test.cpp");  
    istreambuf_iterator<char> isb(in),end;  
    ostreambuf_iterator<char> osb(cout);  
 while(isb!=end)  
        *osb++ = *isb++;  
    cout<<endl;  
 return 0;  
}  

这段代码的意思是把test.cpp中的内容读出来并打印到终端上,输出的结果原分不动地保留了test.cpp的格式,下面我们来看另外一个例子:

例2:

#include <fstream> 
#include <iostream> 
#include <iterator> 
using namespace std;  
 
int main(){  
 
    ifstream in("test.cpp");  
    istream_iterator<char> isb(in),end;  
    ostream_iterator<char> osb(cout);  
 while(isb!=end)  
        *osb++ = *isb++;  
    cout<<endl;  
 return 0;  
}  

这段代码的输出舍弃了test.cpp中的所有空白!所以打印在终端上一堆字符。区分这两个iterator也很简单,只要记住带“buf”的更接近底层,所以原分不动地把所有字符都读了进来。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小小挖掘机

三分钟Python充电-解压可迭代对象赋值给多个变量

""" 问题: 如果一个可迭代对象的元素个数超过变量个数时,会抛出一个ValueError,那么怎样才能从这个可迭代对象中解压出N个元素出来? 解决方案: P...

2616
来自专栏web

sublime快捷键

1323
来自专栏Huramkin的归档库

VSCode的快捷键

|快捷键|作用| |Alt + Click| 插入光标-支持多个| |Ctrl + Alt + up/down |上下插入光标-支持多个| |Ctr...

1651
来自专栏玄魂工作室

textarea的中文输入判断与搜狗输入法的特殊行为

虽然要讲解的知识点是通用的,但是还是要介绍下我的应用场景和测试环境。 0.1 应用场景和测试环境 我的应用是一块使用Html Canvas开发的黑板,在黑板上实...

32911
来自专栏Python攻城狮

pycharm快捷键及一些常用设置

1. pycharm默认是自动保存的,习惯自己按ctrl + s 的可以进行如下设置:

733
来自专栏林德熙的博客

dotnet 设计规范 · 数组定义

X 不建议设置数组类型的字段为只读。虽然用户不能修改字段,但是可以修改字段里面的元素。如果需要一个只读的集合,建议定义为只读集合。

441
来自专栏Vamei实验室

纸上谈兵: 表 (list)

表 表(list)是常见的数据结构。从数学上来说,表是一个有序的元素集合。在C语言的内存中,表储存为分散的节点(node)。每个节点包含有一个元素,以及一个指向...

1838
来自专栏闵开慧

table边框设置

table边框设置 一、表格的常用属性 基本属性有:width(宽度)、height(高度)、border(边框值)、cellspacing(表格的内宽,即...

3075
来自专栏禅林阆苑

LESS 学习demo 【原创】

LESS 学习demo Write By CS逍遥剑仙 我的主页: www.csxiaoyao.com GitHub: github.com/...

3559
来自专栏orientlu

C 链表 - linux 如何实现

链表是基本数据结构, 一开始学习数据结构时, 我一般这么定义, 对应实现从头或尾插入的处理函数,

933

扫码关注云+社区