C++数据流迭代器(iterators)一般不直接使用,而是用做某些算法的参数。这些算法多是STL中的算法,是用C习惯了的朋友,应该会觉得这个有点不需太习惯,但是这就是C++的方法,据C++之父Bejarne的说法就是代码要elegant(优雅)!
多使用数据流,并熟悉这个概念的话,我觉得还是挺好的概念的。
例如下面是一个简单的程序:
int main()
{
string from, to;
cin >> from >> to; //读取源文件和目标文件
ifstream is {from}; // 源文件作为输入流
istream_iterator<string> ii {is}; //定义其输入流迭代器
istream_iterator<string> eos {}; //作为结束符
ofstream os{to}; //定义输出流
ostream_iterator<string> oo {os,"\n"}; //定义输出流的迭代器
vector<string> b {ii,eos}; //用输入流迭代器和其结束符初始化vector b
sort(b.begin(),b.end()); //STL中的标准排序算法,对b进行排序
unique_copy(b.begin(),b.end(),oo); //STL中的算法,copy到输出流中去,记得前面我们定义了输出流是ofstream os{to},就是说输出流和to目标文件绑定在一起了,所以copy到输出流中,其实就是copy到了to文件里面了。
return !is.eof() || !os; //最后的输出状态如果不是eof结束符或者正常状态os,就返回错误
}
文件输入流(ifstream)是一个可以绑定一个文件的流, ofstream是一个可以绑定输出文件的流。ofstream_iterator的第二个参数,如:ofstream_iterator<string> oo{os, "\n"},的"\n"是作为一个定界符,也就是用来分隔各个输出值的。
看C++之父的书的朋友都知道,他老人家经常说的就是elegant,优雅的代码,清洁,简短的代码,他从来不喜欢那么ugly,verbose 丑陋和冗长的代码,所以下面是更加elegant,short的代码:
int main()
{
string from, to;
cin >> from >> to;
ifstream is {from};
ofstream os {to};
set<string> b {istream_iterator<string>{is},istream_iterator<string>{}};
copy(b.begin(),b.end(),ostream_iterator<string>{os,"\n"});
return !is.eof() || !os;
}
这里之所以简短了,是因为用了set代替了vector。set容器的特征是不保持同样的数据,所以这里只用copy就可以了,不用unque_copy了。第二个特征是set容器的数据自动排序好的了,所以这里不用sort排序。
这里set<string> b这句也更加难理解了,因为输入流迭代器和其结束符都只是用一次就可以了,所以这里也只用了临时对象的概念,这个概念就是创建一个对象,但是没有对象名字,所以只有调用时候可以是用,调用完之后也就不存在这个对象了。
reference:
The C++ Programming Language 4ed Chapter04
分享到:
相关推荐
TCPL C++程序设计语言, C++程序设计的圣经,不善于用狗狗搜索的请在这里下载
本人搜集了C++四书五经中提到的所有26本书,并按照分类分别上传了7个文件,包括: 1. TCPL和D&E 2. 入门教程 3. 高效健壮编程 4. 模板和泛型编程 5. 标准库 6. 网络编程 7. 杂项(因这个文件太大,分成了2个) 与...
NULL 博文链接:https://mingongwang.iteye.com/blog/2222094
本人搜集了C++四书五经中提到的所有26本书,并按照分类分别上传了7个文件,包括: 1. TCPL和D&E 2. 入门教程 3. 高效健壮编程 4. 模板和泛型编程 5. 标准库 6. 网络编程 7. 杂项(因这个文件太大,分成了2个) 与...
本人搜集了C++四书五经中提到的所有26本书,并按照分类分别上传了7个文件,包括: 1. TCPL和D&E 2. 入门教程 3. 高效健壮编程 4. 模板和泛型编程 5. 标准库 6. 网络编程 7. 杂项(因这个文件太大,分成了2个) 与...
本人搜集了C++四书五经中提到的所有26本书,并按照分类分别上传了7个文件,包括: 1. TCPL和D&E 2. 入门教程 3. 高效健壮编程 4. 模板和泛型编程 5. 标准库 6. 网络编程 7. 杂项(因这个文件太大,分成了2个) 与...
本人搜集了C++四书五经中提到的所有26本书,并按照分类分别上传了7个文件,包括: 1. TCPL和D&E 2. 入门教程 3. 高效健壮编程 4. 模板和泛型编程 5. 标准库 6. 网络编程 7. 杂项(因这个文件太大,分成了2个) 与...
本人搜集了C++四书五经中提到的所有26本书,并按照分类分别上传了7个文件,包括: 1. TCPL和D&E 2. 入门教程 3. 高效健壮编程 4. 模板和泛型编程 5. 标准库 6. 网络编程 7. 杂项(因这个文件太大,分成了2个) 与...
C++之父,TCPL第四版,不过是英文版。
TCPL the C++ programming language Third Edition(完整书签) C++ 之父原著 文字版
迄今为止,TCPL是除了C++标准文献之外最权威的C++参考手册。和大多数人的看法不大一样,我认为Bjarne的文字语言并不逊色于他所创建的程序语言,至少我喜欢这种学院气息浓厚的作品。本书对C++语言的描述轮廓鲜明、...
静态类型检查,但并非指定变量或方法参数的类型。可以在Crystal中编写同C语言绑定的代码以调用C语言代码。拥有编译时代码评估和迭代嵌入样板代码。本地化代码的高效编译。向语言参考作贡献本书初步开始翻译,欢迎...
entrys-pro:可在任何地方工作的安全TCPL4隧道
The C++ Programming Language 3rd Edition(中文版)完整最终版
The C++ programming language 部分习题答案
tcpl:我对Brian Kernighan和Dennis Ritchie的“ The C Programming Language”的尝试
实现一个简单的常驻任务是容易的,写一个while True就可以了,但是同时要能接收外界传来的参数,就稍微有点复杂. 我第一个想到的是网络编程中的server/client模式 server作为常驻进程,可以接受client传来的各种参数进行...
原著第1版中介绍的C语言成为后来广泛使用的C语言版本—— 标准C的基础。人们熟知的“hell, World”程序就是由本书首次引入的,现在,这一程序已经成为所有程序设 计语言入门的第一课。 原著第2版根据1987年制定的...
C程序设计语言(中文第二版·新版)Brian W. Kernighan Dennis M. Ritchie epub版
够权威 <br>Brian W.Kernighan && Dennis M.Ritchie