C++STLのvector用法まとめ

13120 ワード

普段よく使うvectorの使い方をまとめてみましょう.
  • 初期化
    int a[3] = {10, 20, 30};
    vector<int> v1; //{}
    vector<int> v2(3); //{0, 0, 0}
    vector<int> v3 {1, 2, 3, 4, 5}; //vector v3 = {1, 2, 3, 4, 5};
    vector<int> v4(3,10); //{10, 10, 10}
    vector<int> v5 = v3; //vector v5(v3);
    vector<int> v6(v3.begin()+1, v3.end()); //vector v6(&a[0], &a[3]);

  • 2 2 D配列初期化
    //{{}}
    vectorint>> vec1;
    //1 1 1
    //1 1 1
    vectorint>> vec2(2, vector<int>(3,1));
    //1 1 1
    //2 3 4
    vectorint>> vec3 = {{1, 1, 1},{2, 3, 4}};

  • 遍歴
    for(int i = 0; i < v3.size(); ++i){
        cout << v3[i] << " ";
    }
    for(vector<int>::iterator it = v3.begin(); it != v3.end(); it++){
        cout << *it << " ";
    }
    for(auto i:v3){
        cout << i << " ";
    }

  • 逆順ループ
    for (auto it = v5.rbegin(); it != v5.rend(); it++){
        cout << *it << " ";
    }

  • 容器長
    v3.size();

  • コンテナの最初の要素、最後の要素を取得
    v3.front();
    v3.back();

  • は空と判断し、1は空、0は空ではない
    v3.empty();

  • エンドプラグ/イジェクト
    //v1{}
    v1.push_back(1); //{1}
    v1.push_back(2); //{1, 2}
    v1.push_back(3); //{1, 2, 3}
    v1.pop_back(); //{1, 2}
    v1.pop_back(); //{1}
    v1.pop_back(); //{}

  • 挿入
    //v3{1, 2, 3, 4, 5}
    v3.insert(v3.begin()+1, 0); //{1, 2, 3, 4, 5}->{1, 0, 2, 3, 4, 5}
    v3.insert(v3.end(), 0); //{1, 0, 2, 3, 4, 5}->{1, 0, 2, 3, 4, 5, 0}
    v3.insert(v3.begin(), v4.begin(), v4.end()); //{1, 0, 2, 3, 4, 5, 0}->{10, 10, 10, 1, 0, 2, 3, 4, 5, 0}

  • マージ
    //v2{0, 0, 0} v4{10, 10, 10}
    v2.insert(v2.end(), v4.begin(), v4.end());//{0, 0, 0}->{0, 0, 0, 10, 10, 10}

  • 削除
    v3.erase(v3.begin()+4); //{10, 10, 10, 1, 0, 2, 3, 4, 5, 0}->{10, 10, 10, 1, 2, 3, 4, 5, 0}
    //erase()              ,            ,         
    //*v3.erase(v3.end()-1)=0
    v3.erase(v3.end()-1); //{10, 10, 10, 1, 2, 3, 4, 5, 0}->{10, 10, 10, 1, 2, 3, 4, 5}
    v3.erase(v3.begin(), v3.begin()+3); //{10, 10, 10, 1, 2, 3, 4, 5}->{1, 2, 3, 4, 5}

  • クリア
    v2.clear(); //{0, 0, 0, 10, 10, 10}->{}

  • 存在するか否かを判断する
    //#include  find();
    vector<int>::iterator it = find(v3.begin(), v3.end(), 0);
    if(it != v3.end()){
        //find it
    }
    else{
        //not found
    }

  • ソート
    //  
    sort(v3.begin(), v3.end());// sort(v3.begin(), v3.end(), less());
    //  
    //#include greater()    , less()    
    sort(v3.begin(), v3.end(), greater<int>());
    //           
    bool complare(int a,int b)
    {
        return a>b;
    }
    sort(v3.begin(), v3.end(), complare);

  • 二次ソート
    bool complare(pair<int, int> l,pair<int, int> r)
    {
        return l.first != r.first ? l.first < r.first : l.second > r.second;
    }
    //
    vectorint, int>> vp{{1,1},{1,2},{2,2},{2,3},{3,3}};//{{1,1},{1,2},{2,2},{2,3},{3,3}}->{{1,2},{1,1},{2,3},{2,2},{3,3}}
    sort(vp.begin(), vp.end(), complare);

  • 交換
    //vector.swap(v)         
    v1.swap(v3); // v1:{}->{5,4,3,2,1}, v3:{5,4,3,2,1}->{}
    swap(v1[0], v1[1]);// v1:{5,4,3,2,1}->{4,5,3,2,1}

    vectorメソッドテーブルhttps://github.com/huihut/interview/tree/master/STL#vector

  • 方法
    意味
    vector
    コンストラクタ
    ~vector
    コンストラクション関数、コンテナオブジェクトの破棄
    operator=
    コンテナに新しいコンテンツを割り当て、現在のコンテンツを置き換え、サイズを変更します.
    begin
    コンテナ内の最初の要素を指す反復器を返します.
    end
    コンテナ内の最後の要素の後を指す理論要素の反復器を返します.
    rbegin
    コンテナ内の最後の要素を指す逆反復器を返します.
    rend
    最初の要素の前の理論要素を指す逆反復器を返します.
    cbegin
    コンテナ内の最初の要素を指す定数反復器(const_iterator)を返します.
    cend
    容器内の最後の要素の後を指す理論要素の定数反復器(const_iterator)を返します.
    crbegin
    コンテナ内の最後の要素を指す定数逆反復器(const_reverse_iterator)を返します.
    crend
    コンテナ内の最初の要素を指す前の理論要素の定数逆反復器(const_reverse_iterator)を返します.
    size
    コンテナ内の要素の数を返します.
    max_size
    コンテナに収容できる最大要素数を返します.
    resize
    n(パラメータ)個の要素を含むようにコンテナのサイズを調整します.
    capacity
    現在vectorに割り当てられているストレージ領域(容量)のサイズを返します.
    empty
    戻るvectorが空かどうか
    reserve
    要求vector容量は少なくともn(パラメータ)個の要素を含むのに十分である
    shrink_to_fit
    コンテナのsize(要素数)に適応するためにcapacity(容量)を小さくする必要があります.
    operator[]
    コンテナ内のn番目の位置の要素の参照を返します.
    at
    コンテナ内のn番目の位置の要素の参照を返します.
    front
    コンテナ内の最初の要素への参照を返します.
    back
    コンテナ内の最後の要素への参照を返します.
    data
    コンテナ内の最初の要素を指すポインタを返します.
    assign
    新しいコンテンツをvectorに割り当て、現在のコンテンツを置き換え、sizeを変更します.
    push_back
    コンテナの最後の要素の後に新しい要素を追加
    pop_back
    コンテナの最後の要素を削除し、コンテナsizeを効果的に1つ減らします.
    insert
    指定した位置のエレメントの前に新しいエレメントを挿入することでコンテナを拡張し、エレメントを挿入する数でコンテナのサイズを効果的に増やします.
    erase
    vectorから単一の要素(position)または一連の要素([first,last])を削除すると、除去された要素の数が効果的に減少し、容器のサイズが破壊されます.
    swap
    x(パラメータ)のコンテンツによってコンテナのコンテンツが交換され、xは別のタイプが同じでsizeが異なる可能性のあるvectorオブジェクトである
    clear
    vectorからすべての要素(破棄された)を削除し、sizeが0のコンテナを残します.
    emplace
    position(パラメータ)位置に新しい要素args(パラメータ)を挿入することでコンテナを拡張
    emplace_back
    vectorの最後に新しい要素を挿入し、現在の最後の要素の直後に挿入します.
    get_allocator
    vectorに関連付けられたコンストラクタオブジェクトのコピーを返します
    swap(vector)
    コンテナx(パラメータ)の内容は、コンテナy(パラメータ)の内容と交換されます.サイズは異なる場合がありますが、両方のコンテナオブジェクトは同じタイプ(同じテンプレートパラメータ)でなければなりません.
    relational operators (vector)
    vectorA>vectorBのような形をします.各要素のサイズ関係を比較