TCPL C++迭代器的用法 用作参数传递 读写文件
来源:互联网 发布:awr sql statistics 编辑:程序博客网 时间:2024/06/06 08:58
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++迭代器的用法 用作参数传递 读写文件
- TCPL - C++迭代器的用法 - 操作数组和数据流
- grep -c的用作
- php 对象用&传递参数 与 对象用作普通参数的区别
- 指针用作函数的参数
- c读写文件与文件参数管理
- 利用C/C++库函数读写文件的基本用法
- m文件转c/c++,参数传递
- C文件的读写
- C文件的读写
- 文件读写的参数 权限
- Oracle sys_refcursor 游标变量不能用作参数传递
- C语言的参数传递
- C语言的参数传递
- C语言的参数传递
- c函数的参数传递
- C函数的参数传递
- C参数传递的演示
- Android AsyncTask完全解析,带你从源码的角度彻底理
- hadoop info 1
- UVa 10420 List of Conquests (STL map)
- URAL 1309: Dispute
- 时间复杂度
- TCPL C++迭代器的用法 用作参数传递 读写文件
- IT English Collection(27)of Collection
- 继续实习?还是潜心补习?
- 从代码角度进行优化的技巧
- Jbpm5.4配置与安装
- windows下配置git
- 浅谈MVC
- java基础
- 异步调用 概念解释