std :: array要素をstd :: vectorに追加または挿入する方法は?

ダニー・キム

私はc ++に比較的慣れておらず、いくつかの調査を試みましたが、オンラインで検索しているときに、主にC配列ではなくC配列に出くわしましたstd::arraystd :: array要素をstd :: vectorに追加std::arrayし、要素をstd::vectorに挿入する最も効率的な方法は何ですか?次のようなSTL関数を使用する必要がありますstd::copyか?現在、C ++ 17、MinGW64を使用しています。

lubgr

「追加」値は、問題の要素をコピー/複製するか、ソースコンテナの後方に配置する必要がなく、宛先コンテナに移動するかの2つの意味があります。また、構築時の挿入と、既存の構築済みコンテナへの追加を区別することは理にかなっています。可能であれば、常に、所有するはずの要素を使用してコンテナを構築します。

  1. std::arrayすでに構築されている要素に要素をコピーして追加しますstd::vector

    std::vector<T> dest;
    std::array<T, N> source;
    
    // ...
    
    dest.insert(dest.end(), source.cbegin(), source.cend());
    
  2. 移動-std::arrayすでに構築されている要素に要素を追加しますstd::vector

    std::vector<T> dest;
    std::array<T, N> source;
    
    // ...
    
    dest.insert(dest.end(), std::move_iterator(source.begin()),
                std::move_iterator(source.end()));
    
  3. std::array要素をstd::vectorat構造にコピーします

    std::array<T, N> source;
    
    // ...
    
    std::vector<T> dest(source.cbegin(), source.cend());
    
  4. std::array要素をstd::vectorat構造に移動します

    std::array<T, N> source;
    
    // ...
    
    std::vector<T> dest(std::move_iterator(source.begin()),
                        std::move_iterator(source.cend()));
    

真ん中への挿入について話すとき、ここで追加することはあまりありません-唯一の顕著な違いは、宛先の残りの要素std::vectorが移動構築されるため(O(N))、常に効率が低下することです。

要素を追加するためにヘッダーからstd::moveが存在することにも注意してください(ここsとともに使用できます)。ただし、前者はイテレータの抽象化を操作し、宛先のストレージの詳細を知らなくても一度に1つの要素のコピー/移動を処理するため、これらはへの直接呼び出しほど効率的ではありません(これにより複数のバッファサイズが変更される可能性があります) 、後者はメンバー関数であり、バッファのサイズを1回だけ変更します(必要な場合)。std::copy<algorithm>std::copystd::move_iteratorstd::vector::insertstd::vector

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

C ++連続する範囲間をstd :: vectorに挿入する方法は?

分類Dev

std :: vectorの要素を同じベクトルに挿入することは許可されていますか?

分類Dev

std :: arrayをstd :: vectorに変換する方法は?

分類Dev

C ++ std :: vector <std :: pair <const int、int >>は要素を挿入できません

分類Dev

std :: arrayまたはstd :: vectorを逆方向に反復する正しい方法は何ですか?

分類Dev

std :: vectorの最後に挿入またはpush_backしますか?

分類Dev

std :: vectorの最後に挿入またはpush_backしますか?

分類Dev

要素タイプがコピーできないstd :: vectorにn個の連続した要素を挿入するにはどうすればよいですか?

分類Dev

追加の割り当てなしでstd :: vector <const T *>をstd :: vector <T *>に変換する方法はありますか?

分類Dev

QByteArrayをstd :: istreamまたはstd :: ifstreamに変換する方法は?

分類Dev

std :: vectorに生のバイトを追加する方法は?

分類Dev

std :: arrayのstd :: vectorに配置する方法は?

分類Dev

std :: vector <std :: vector <float >>をstd :: vector <float2>に変換する高速な方法はありますか?

分類Dev

std :: arrayをstd :: tupleに変換する方法は?

分類Dev

std :: stringにcharを追加する方法は?

分類Dev

std :: vectorからstd :: stack c ++に要素をコピーします

分類Dev

std :: vectorの要素を1つ移動する方法は?

分類Dev

std :: array内の特定の範囲の要素を読み取り/書き込みまたは反復する方法は?

分類Dev

std :: stringをstd :: vector <uint8_t>に変換する方法は?

分類Dev

std :: arrayに追加

分類Dev

std :: vector <std :: vector <std :: string >>をstd :: vector <std :: vector <double >>に変換します

分類Dev

`std :: map <string、double> * myMap`に挿入する方法は?

分類Dev

C ++ 11でstd :: mapに挿入する方法は?

分類Dev

C ++ 17でstd :: stringをstd :: vector <std :: byte>に変換する方法は?

分類Dev

vector <vector <int >>にstd :: vector :: emplace_backを使用する方法は?

分類Dev

.first値に基づいてstd :: pairのstd :: vectorから要素を削除する方法は?

分類Dev

std :: sortを使用してstd :: arrayをソートする方法は?

分類Dev

`std :: set`の要素に基づいて` std :: vector`をスライスする方法

分類Dev

std :: vector <std :: string>の要素を削除します

Related 関連記事

  1. 1

    C ++連続する範囲間をstd :: vectorに挿入する方法は?

  2. 2

    std :: vectorの要素を同じベクトルに挿入することは許可されていますか?

  3. 3

    std :: arrayをstd :: vectorに変換する方法は?

  4. 4

    C ++ std :: vector <std :: pair <const int、int >>は要素を挿入できません

  5. 5

    std :: arrayまたはstd :: vectorを逆方向に反復する正しい方法は何ですか?

  6. 6

    std :: vectorの最後に挿入またはpush_backしますか?

  7. 7

    std :: vectorの最後に挿入またはpush_backしますか?

  8. 8

    要素タイプがコピーできないstd :: vectorにn個の連続した要素を挿入するにはどうすればよいですか?

  9. 9

    追加の割り当てなしでstd :: vector <const T *>をstd :: vector <T *>に変換する方法はありますか?

  10. 10

    QByteArrayをstd :: istreamまたはstd :: ifstreamに変換する方法は?

  11. 11

    std :: vectorに生のバイトを追加する方法は?

  12. 12

    std :: arrayのstd :: vectorに配置する方法は?

  13. 13

    std :: vector <std :: vector <float >>をstd :: vector <float2>に変換する高速な方法はありますか?

  14. 14

    std :: arrayをstd :: tupleに変換する方法は?

  15. 15

    std :: stringにcharを追加する方法は?

  16. 16

    std :: vectorからstd :: stack c ++に要素をコピーします

  17. 17

    std :: vectorの要素を1つ移動する方法は?

  18. 18

    std :: array内の特定の範囲の要素を読み取り/書き込みまたは反復する方法は?

  19. 19

    std :: stringをstd :: vector <uint8_t>に変換する方法は?

  20. 20

    std :: arrayに追加

  21. 21

    std :: vector <std :: vector <std :: string >>をstd :: vector <std :: vector <double >>に変換します

  22. 22

    `std :: map <string、double> * myMap`に挿入する方法は?

  23. 23

    C ++ 11でstd :: mapに挿入する方法は?

  24. 24

    C ++ 17でstd :: stringをstd :: vector <std :: byte>に変換する方法は?

  25. 25

    vector <vector <int >>にstd :: vector :: emplace_backを使用する方法は?

  26. 26

    .first値に基づいてstd :: pairのstd :: vectorから要素を削除する方法は?

  27. 27

    std :: sortを使用してstd :: arrayをソートする方法は?

  28. 28

    `std :: set`の要素に基づいて` std :: vector`をスライスする方法

  29. 29

    std :: vector <std :: string>の要素を削除します

ホットタグ

アーカイブ