【C++学習ノート】容器反復器

2879 ワード

1、反復器の紹介
バックグラウンド:ポインタは、ストレージ空間の連続したデータ構造を巡回するために使用できますが、ストレージ空間費が連続している場合は、非配列のデータ構造を巡回するためにポインタのような動作をするクラスを探す必要があります.定義:反復器は、コンテナ内の要素を検査し、要素を巡回するデータ型です.
反復器は、コンテナ内のオブジェクトへのアクセス方法を提供し、コンテナ内のオブジェクトの範囲を定義します.
反復器(Iterator)はポインタ(pointer)の汎化であり、プログラマが異なるデータ構造(コンテナ)を同じ方法で処理できるようにする.
  • 反復器は、オブジェクトへの間接アクセスを提供するC言語のポインタタイプに似ています.
  • ポインタはC言語の知識点であり、反復器はC++の知識点である.ポインタは柔軟で、反復器の機能は豊富です.
  • 反復器は、コンテナオブジェクトまたはstringオブジェクトへのアクセス方法を提供し、コンテナ範囲を定義します.

  • 2、反復器とポインタの違い:
    コンテナとstringには、反復器タイプがあり、反復器を返すメンバーもいます.たとえば、コンテナにはメンバーbeginとendがあり、beginメンバーは最初の要素を指す反復器をコピーして返し、endメンバーはコンテナの最後の要素の次の位置を指す反復器を返します.つまり、endは存在しない要素を示すので、endは最後の反復器を返します.
    3、容器反復器の使用
    各コンテナタイプは独自の反復器タイプを定義し、
    //  vector:
    
    vectorvector< int>:: iterator iter;
    
    //      iter   ,
    //      vector< int>   iterator   
    

    簡単に言えば、コンテナクラスは独自のiteratorタイプを定義し、コンテナ内の要素にアクセスします.各コンテナは、反復器の様々な動作をサポートするiteratorというタイプを定義します.
    共通コンテナ反復器のタイプは次のとおりです.
    ようき
    サポートされている反復タイプ
    説明
    vector
    ランダムアクセス
    ランダムアクセスの配列タイプで、配列要素への迅速なアクセスとシーケンスの末尾での迅速な挿入と削除操作を提供します.必要に応じて自分のサイズを変更できます
    deque
    ランダムアクセス
    ランダムアクセスの配列タイプで、シーケンスの両端をすばやく挿入および削除する機能を提供します.必要に応じてサイズを変更できます
    list
    双方向
    ランダムアクセスをサポートしない配列タイプで、挿入と削除にかかる時間は位置に関係なく固定されています.
    set
    双方向
    キーワードとデータ要素が同じ値であり、すべての要素に一意の値が必要であるランダムアクセスコンテナ
    multiset
    双方向
    キーワードとデータ要素が同じ値であり、重複する要素を含むランダムアクセスコンテナ
    map
    双方向
    1つのペアの数値を含むコンテナで、1つの値は実際のデータ値で、もう1つはデータを探すためのキーワードで、1つの特定のキーワード知能は1つの要素に関連しています.
    multimap
    双方向
    1つのペアの数値を含むコンテナで、1つの値は実際のデータ値であり、もう1つはデータを探すためのキーワードであり、1つのキーワードは複数のデータ要素に関連付けることができる.
    反復器タイプは、主に2つのクラス、ランダムアクセス、双方向アクセスをサポートします.ここでvectorやdequeはランダムアクセスをサポートし,list,set,mapなどは双方向アクセスをサポートする.1)ランダムアクセス:配列要素への高速ランダムアクセスとシーケンスの末尾での高速挿入と削除が可能です.2)双方向アクセス:挿入と削除にかかる時間は、場所に関係なく固定されます.
    4、反復器の操作
    反復タイプ
    操作
    説明
    すべての反復
    p++
    背面オートインクリメント
    ++p
    ぜんちじこかさんき
    にほうこう反復器
    –p
    ぜんちじこげんすいき
    p–
    後置自減反復器
    入力反復
    *p
    右の値として反復器を参照
    p=p1
    1つの反復器を別の反復器に割り当てる
    p==p1
    反復器の同等性の比較
    p!=p1
    反復器の不等性の比較
    しゅつりょく反復器
    *p
    左の値として反復器を参照
    p=p1
    1つの反復器を別の反復器に割り当てる
    じゅんほうこう反復器
    入出力反復器の機能の提供
    ランダム反復器
    p+=i
    反復器をiビットインクリメント
    p-=i
    反復器をiビット減算
    p+i
    pビットにiビットを加えた反復器
    p-i
    pビットをiビット減らした反復器
    p[i]
    pビット要素がiビットからずれた要素参照を返す
    p
    反復器pの位置がp 1の前にある場合はtrueを返し、そうでない場合はfalseを返す
    p<=p1
    反復器pの位置がp 1の前または同じ位置にある場合にtrueが返され、そうでない場合falseが返される
    p>p1
    反復器pの位置がp 1の後であればtrueを返し、そうでなければfalseを返す
    p>=p1
    反復器pの位置がp 1後または同じ位置にある場合にtrueを返し、trueを返し、そうでない場合falseを返す