[C++ラーニング]反復器iteratorまとめ

2210 ワード

説明
反復器はポインタタイプに似ており、反復器はオブジェクトへの間接アクセスも提供します.反復器の場合、オブジェクトはvectorまたはstringの要素または文字です.反復器を使用すると、ある要素にアクセスできます.反復器は、ある要素から別の要素に移動できます.反復器にも有効と無効の区別があり、有効反復器はある要素または容器の末尾要素の次の位置を指し、残りは無効な要素です.
使用
auto b = v.begin(); // v      
auto e = v.end(); // v          

endは、コンテナまたはstringオブジェクトを指すテール要素の次の位置を返す責任を負います.すなわち、この反復器は存在しない要素を示しています.この反復器はタグにすぎず、実際の意味がなく、コンテナのすべての要素が処理されたことを示しています.endメンバーが戻ってきた反復器は、テール反復器と呼ばれます.
1.反復演算子
演算子
説明
*iter
反復器iterで知られている要素の参照を返します.
iter->member
iterが指す要素のメンバーを参照しないでください.(*iter).memberに等しいです.
++iter
iterをコンテナの次の要素に向ける
--iter
iterをコンテナの前の要素に向ける
iter1 == iter2/iter1 != iter2
2つの反復器が等しいかどうかを判断する
例:
string s("hello world!");
for (auto iter = s.begin(); iter != s.end(); ++iter)
{
    cout << *iter << endl;
}

2.反復器のタイプ
反復器を持つ標準ライブラリタイプはiteratorとconstを使用します.iteratorは反復器のタイプを表します.
vector::iterator iter1;
string::iterator iter2;

vector::const_iterator iter3;
string::const_iterator iter4;

上記の2つの反復器タイプの違いは、iteratorが読み書きできることであり、const_iteratorは読むしかありません.vectorオブジェクトまたはstringが定数の場合はconst_しか使用できませんiterator.
3.参照解除とメンバー・アクセス
リファレンスを解除すると、反復器が指すオブジェクトが得られます.オブジェクトがクラスに適切である場合、メンバーにさらにアクセスすることができます.
たとえば、stringからなるvectorオブジェクトをチェックするには、要素値が空であるかどうかをチェックする必要があります.
(*iter).empty(); //     
*iter.empty(); //     ,iter          empty   

4.無効な反復器
反復を使用すると、反復は無効になります.
  • forループでvectorオブジェクトに要素を追加します.
  • vectorオブジェクトの容量を変更する可能性のあるいずれかの動作.

  • ただし、反復器を使用した循環体では、その属するコンテナに要素を追加することはできません!!
    5.反復器の演算
    えんざん
    説明
    iter + n
    反復器に整数を加えると、反復器は依然として反復器であり、結果として反復器は元の反復器よりもいくつかの要素を前方に移動した.結果反復器またはコンテナ内の要素、またはコンテナ内のテール要素の次の位置を指します.
    iter - n
    反復器から整数を減算したものは反復器であり,結果として反復器は元の反復器よりもいくつかの要素を後方に移動した.結果反復器またはコンテナ内の要素、またはコンテナ内のテール要素の次の位置を指します.
    iter+=nまたはiter-=n
    iter加算/減算の複合付与文
    iter1 - iter2
    2つの反復器を減算すると、演算に関与する反復器は同じコンテナの要素または末尾の要素の次の位置を指さなければならない距離になります.
    >、>=、
    反復関係演算子.演算に関与する反復器は、同じコンテナの要素または末尾の要素の次の位置を指す必要があります.
    転載先:https://www.cnblogs.com/linzijie1998/p/11544376.html