2013年(56)
分类: C/C++
2013-10-24 16:27:45
数据流迭代器(iterators)一般不直接使用,而是用做某些算法的参数。这些算法多是STL中的算法,是用C习惯了的朋友,应该会觉得这个有点不需太习惯,但是这就是的方法,据C++之父Bejarne的说法就是代码要elegant(优雅)!
多使用数据流,并熟悉这个概念的话,我觉得还是挺好的概念的。
例如下面是一个简单的程序:
[cpp]
int main()
{
string from, to;
cin 》 from 》 to; //读取源文件和目标文件
ifstream is {from}; // 源文件作为输入流
istream_iterator
istream_iterator
ofstream os{to}; //定义输出流
ostream_iterator
vector
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
看C++之父的书的朋友都知道,他老人家经常说的就是elegant,优雅的代码,清洁,简短的代码,他从来不喜欢那么ugly,verbose 丑陋和冗长的代码,所以下面是更加elegant,short的代码:
[cpp]
int main()
{
string from, to;
cin 》 from 》 to;
ifstream is {from};
ofstream os {to};
set
copy(b.begin(),b.end(),ostream_iterator
return !is.eof() || !os;
}
这里之所以简短了,是因为用了set代替了vector.set容器的特征是不保持同样的数据,所以这里只用copy就可以了,不用unque_copy了。第二个特征是set容器的数据自动排序好的了,所以这里不用sort排序。
这里set
reference:
The C++ Programming Language 4ed Chapter04