c++ STL标准容器之Iterator使用_C/C++_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > C/C++ > c++ STL标准容器之Iterator使用

c++ STL标准容器之Iterator使用

 2012/6/1 16:41:30  jiangwenfeng762  程序员俱乐部  我要评论(0)
  • 摘要:C++STL绝大多数标准容器都提供了Iterator,一些容器,比如priority_queue,因为语意上就不应该允许随便遍历容器中的元素,所以也就没有Iterator了。23种经典设计模式中就有迭代器模式,java集合框架也实现了这个模式:packagejava.util;publicinterfaceIterator<E>{booleanhasNext();Enext();voidremove();}c++的迭代器要比java更灵活,主要体现在:1
  • 标签:使用 c++ 标准

C++ STL绝大多数标准容器都提供了Iterator,一些容器,比如priority_queue,因为语意上就不应该允许随便遍历容器中的元素,所以也就没有Iterator了。

?

23种经典设计模式中就有迭代器模式,java集合框架也实现了这个模式:

?

package java.util;


public interface Iterator<E> {

    boolean hasNext();

    E next();


    void remove();
}

?

c++的迭代器要比java更灵活,主要体现在:

1.java只有从前向后的一种迭代器,c++除了从前向后迭代器外,还提供了从后向前的迭代器,比如:

?

map<int,int> amap;
amap.insert(pair<int,int>(1,1));
amap.insert(pair<int.int>(2,2));
map<int,int>::iterator it;
for(it = amap.begin();it != ampa.end();it++)//从前向后
{
    cout<<"key:"<<it->first<<" value:"<<it->second<<endl;
}
map<int,int>::reverse_iterator rit;
for(rit = amap.rbegin();rit != amap.rend();rit++)//从后向前
{
     cout<<"key:"<<rit->first<<" value:"<<rit->second<<endl;
}

?

2.c++除了iterator之外,还提供了const_iterator,后者只能读取集合中的数据,但是不能改变其值.

?

3.java的迭代器貌似只能单步自增,而c++的迭代器 除此之外,还可以实现算数操作,比如+n,-n,这样对于需要随机读取某个元素的场景就就很有用了,但是,貌似只有 vector的iterator才支持算数操作。也就是说前面例子中的迭代器it是不能进行 it = it+n之类的操作的。这一点要切记。

?

?

关于c++ iterator比较完整阐述的一篇博文:

http://wenku.baidu.com/view/1b325dc7aa00b52acfc7cafb.html

发表评论
用户名: 匿名