STL中迭代器浅析(转自:http://blog.csdn.net/gou_zh/archive/2008/11/04/3209974.aspx)
来源:互联网 发布:xin域名注册 编辑:程序博客网 时间:2024/05/14 06:54
STL中迭代器浅析
C++中的迭代器主要有三种,迭代器的作用就是让你用*iter就可以访问容器中的值,用iter++就可以向后遍历,而不必去管容器的内部结构。
1.insert iterator(安插型迭代器,三种)
back_insert_iterator, front_insert_iterator, insert_iterator //使用前必须初始化
back_inserter(), front_inserter(), inserter() //与上面迭代器相关的函数
使用方法如下:
vectorcoll;
back_insert_iterator< vector >iter(coll);
front_insert_iterator< vector >iter2(coll);
back_inserter(coll) = 20; //在coll后面插入值20
front_inserter(coll) = 50; //在coll前面插入值50
copy(coll.begin(), coll.end(), back_insert(coll));
setcoll2;
insert_iterator< set >iter(coll2, coll2.begin());
inserter(coll2, coll2.end()) = 50;
copy(coll2.begin(), coll.end(), inserter(coll2, coll2.begin());
从上面的例子可以看出,类似back_insert_iterator的可以直接用对象初始化,用*iter取元素,iter++递增;同时,back_inserter是种简单方法,它可以在被赋值后自动递增迭代器;front_insert_iterator与之不同处在于它每安插一个元素都是在已有的元素前面;而insert_iterator初始化时不仅要指出要插入的对象,还需要被告知即将插入的位置。
2.reverse iterator(逆向迭代器,一般用于可以双向移动的容器)
deque::iterator pos = coll.begin();
deque::reverse_iterator rpos(pos); //反转
deque::iterator rrpos = rpos.base(); //再次反转
由上可知,逆向迭代器的初始化方式需要指定域,他不是所有容器都能使用。
3.stream iterator(流迭代器)
istream_iterator, ostream_iterator;
使用方法如下:
copy(coll.begin(), coll.end(), ostream_iterator(cout)); //拷贝到标准输出
copy(coll.begin(), coll.end(), ostream_iterator(cout," ")); //以空格隔开
istream_iterator cinpos(cin);
ostream_iterator coutpos(cout);
while( cinpos != istream_iterator() )*coutpos++ = *cinpos++; //将标准输入拷贝到标准输出
注意istream迭代器中出现的istream_iterator(),他表示流结束,产生一个end-of-stream信息。
4.与迭代器相关的函数
void advance(InputIterator &pos, dist n); //使迭代器pos移动n个元素,移动方向取决于n的正负
dist distanse(InputIterator pos1, InputIterator pos2); //返回两个迭代器的间距,两个迭代器必须在同一容器,而且有先后次序
void iter_swap(ForwardIterator1 pos1, ForwardIterator2 pos2); //交换两个迭代器的元素值
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/gou_zh/archive/2008/11/04/3209974.aspx
- STL中迭代器浅析(转自:http://blog.csdn.net/gou_zh/archive/2008/11/04/3209974.aspx)
- SqlDataAdapter Update(转自:http://blog.csdn.net/dingjinze/archive/2008/11/26/3379743.aspx)
- window.event(转自:http://blog.csdn.net/cnkiminzhuhu/archive/2008/02/22/2112408.aspx)
- CAML 载自 http://blog.csdn.net/yqandxyz/archive/2008/09/04/2881189.aspx
- 转自:http://blog.csdn.net/jingang123gz/archive/2008/03/02/2141075.aspx
- java关键字Transient 转自:http://blog.csdn.net/flynetcn/archive/2008/03/03/2142020.aspx
- 网页特效代码 (转自http://blog.csdn.net/arielxp/archive/2004/10/20/143752.aspx)
- eVC下CString 操作指南 转自http://blog.csdn.net/favory/archive/2008/11/05/3227606.aspx
- SQL Server临时表(转) (转自:http://blog.csdn.net/zh520/archive/2009/04/17/4087943.aspx)
- SQL SERVER性能优化综述(转自http://blog.csdn.net/Haiwer/archive/2008/08/25/2826881.aspx)
- Subversion服务器搭建(转自:http://blog.csdn.net/ladofwind/archive/2008/02/17/2100200.aspx)
- C#环境下的钩子详解(转自http://blog.csdn.net/stevenson_aspdotnet/archive/2010/03/04/5346725.aspx)
- 简单驱动开发配置(转自http://blog.csdn.net/yinxu/archive/2007/11/12/1880561.aspx)经典
- 虚拟平台在嵌入式中的应用(转自雪松http://blog.csdn.net/coolbacon/archive/2011/04/11/6316403.aspx#1638545)
- Qte与Qt(转自http://blog.csdn.net/kevin881/archive/2005/01/03/238772.aspx)
- 集合的clone[转自http://blog.csdn.net/dr2tr/archive/2006/03/07/617474.aspx]
- 数据库隔离级别 (转自http://blog.csdn.net/enlicliu/archive/2009/02/23/3930499.aspx)
- WebKit研究报告(转自http://blog.csdn.net/hou_jiong/archive/2009/01/18/3831022.aspx)
- CSS 鼠标样式
- 三维交互开发(2)-DxStudio的hello world
- html title换行方法
- Android源码下载、编译、运行
- CentOS一键安装VPN
- STL中迭代器浅析(转自:http://blog.csdn.net/gou_zh/archive/2008/11/04/3209974.aspx)
- 用VC操作INI文件
- 内存不能为“read”或“written”的解决方案
- Linux 系统配置文件
- jquery中一些用法备忘
- 记录一些java代码
- 成为CSDN会员了
- VC 调试小记之--warning LNK4098: defaultlib "LIBC" conflicts with use of other libs; use /NODEFAULTLIB:library
- C++常见的三种中文内码转换代码