【C++11-17】の反復器の概要

2799 ワード

【C++11-17】の反復器の概要
一、反復器vectorの概要
反復器はコンテナ内の要素を遍歴するデータ型であり、このデータ型はポインタに似ており、反復器がコンテナ内の要素を指すために使用されることを理解しています.string,vector,[],少ない[]で,より一般的なアクセス方式は反復器(より汎用)である.反復器では、コンテナの元の値、stringの各文字、反復器が指す要素の値を変更することができます.+、--List mapは,コンテナ内の要素に反復器でアクセスすることをできるだけ習得する.
二:容器の反復器タイプ
vector iv = { 100,200,300 };
vector::iterator iter;//     ,    vector

皆さんは理解する時、全体のvector::iteratorを1つのタイプに理解して、このタイプは反復器に専門的に応用します.このタイプで変数を定義すると、この変数が反復器であり、ここでiterという変数が反復器である.
三:反復器begin()/end()操作、逆反復器rbegin()/rend()操作
  • begin()/end()は反復タイプを返すために使用されます.
  • rebegin()/rend()反復タイプ
  • を返すために使用される
    begin()は反復器タイプを返します(反復器を返すと理解されます).
    iter = iv.begin();//        , begin()     ,             。
                      //    iter   iv[0];

    end():反復器タイプを返す(反復器を返すと理解される)
    iter = iv.end();//end               。         ,         ?
                    //      end()            。

    反復器が空の場合、反復器beginとend()が返す反復器は同じです.
        vector iv2;
        vector::iterator iterbegin = iv2.begin();
        vector::iterator iterend = iv2.end();
        if (iterbegin == iterend)
        {
            cout << "  v2  " << endl;
        }

    反復器遍歴for文
    vector iv = { 100,200,300 };//      
    for (vector::iterator iter = iv.begin();iter!= iv.end();iter++)
    {
       cout << *iter << endl;//100,200,300
    }
    //     :             ,            。
    //     (     )  rbegin()/rend();
    //rbegin():         ,             ;
    //rend():         ,                 。
     
    for (vector::iterator riter = iv.rbegin(); riter != iv.rend(); riter++)
    {
      cout << *riter << endl;//300,200,100
    }

    四、反復演算子
    
        //a) *iter:     iter        。                     
        //    end(),  end()        。  end()            。
        vector iv3 = {100,200,300};
        vector::iterator iter = iv3.begin();
        cout << *iter << endl;//  
     
        vector::iterator iter = iv3.end();
        cout << *iter << endl;//     ,    
     
     
        //b)++iter:iter++:              ;    end()      ++;
        vector iv4 = { 100,200,300 };
        vector::iterator iter = iv4.end();
        //iter++;
        ++iter;
        cout << *iter << endl;//      ,    
        vector::iterator iter = iv4.begin();
        //iter++;
        ++iter;
        cout << *iter << endl;//   200
     
        //c) --iter iter--:               。      ,    --
        vector::iterator iter = iv4.begin();
        //iter--;
        //cout << *iter << endl;//    
        vector::iterator iter = iv4.end();
        iter--;
        cout << *iter << endl;//300