c++STL標準容器のIterator使用

1705 ワード

C++STLのほとんどの標準容器は、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