C++编程中迭代器是什么
来源:互联网 发布:淘宝店铺背影怎么设置 编辑:程序博客网 时间:2024/05/21 10:07
c++中迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址。迭代器修改了常规指针的接口,所谓迭代器是一种概念上的抽象:那些行为上像迭代器的东西都可以叫做迭代器。然而迭代器有很多不同的能力,它可以把抽象容器和通用算法有机的统一起来。
C++数据流迭代器(iterators)一般不直接使用,而是用做某些算法的参数。这些算法多是STL中的算法,是用C习惯了的朋友,应该会觉得这个有点不需太习惯,但是这就是C++的方法,据C++之父Bejarne的说法就是代码要elegant(优雅)!
多使用数据流,并熟悉这个概念的话,我觉得还是挺好的概念的。
例如下面是一个简单的程序:
[cpp]
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"是作为一个定界符,也就是用来分隔各个输出值的。
elegant,优雅的代码,清洁,简短的代码,那么ugly,verbose 丑陋和冗长的代码,所以下面是更加elegant,short的代码:
[cpp]
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
0 0
- C++编程中迭代器是什么
- c语言编程中%g是什么格式
- c语言编程中%g是什么格式
- c语言编程中%g是什么格式
- c语言编程中%g是什么格式
- 计算机编程是什么?还有c语言又是什么,还有java是什么?
- java是什么,编程是什么
- 编程是什么
- 编程是什么?
- 编程是什么?
- 编程是什么?
- 编程是什么?
- 编程是什么
- C/C++ socket编程教程之一:socket是什么
- 是什么让C#成为最值得学习的编程语言
- c语言程序设计和windows编程区别是什么呢。
- 是什么让C#成为最值得学习的编程语言?
- 编程是什么,什么是编程?
- Android UI 组件
- MVC初识-基本构成和原理
- python的str,unicode对象的encode和decode方法
- 2015-4-15 工作日志
- 听说maven很神奇-02
- C++编程中迭代器是什么
- EasyUI扩展方法
- Android控制应用程序安装位置
- 黑马程序员_java 基础语法
- Style From Now
- Itelliji Idea, GUI Designer
- 终端分页命令
- Java 标注过期方法 注解: @Deprecated
- 黑马程序员Java基础第十三章----装饰者设计模式,模板设计模式