1. ホーム
  2. c++

[解決済み] C++でループせずに配列の内容をstd::vectorにコピーするにはどうしたらいいですか?

2022-05-25 13:18:38

質問

プログラムの別の部分から関数に渡された値の配列があり、後で処理するために保存する必要があります。 データを処理するまでに私の関数が何回呼び出されるか分からないので、動的なストレージ構造が必要です。 std::vector . への標準的なループを行う必要はありませんね。 push_back のようなものを使ってすべての値をコピーできればいいのですが。 memcpy .

どのように解決するのですか?

配列と配列サイズを取得した後にベクトルを構築できれば、そのまま言えるでしょう。

std::vector<ValueType> vec(a, a + n);

...と仮定すると a が配列で n は含まれる要素の数です。 それ以外の場合は std::copy() w/ resize() でうまくいきます。

私なら memcpy() は使わないでください。

また、注目すべきは、これらのどれもが本当にforループを回避しているわけではないということです。 O(n) ランタイム パフォーマンスは、値をコピーするために避けられないものです。

最後に、C言語スタイルの配列は、ほとんどのSTLアルゴリズムにとって完全に有効なコンテナであることに注意してください。 begin() と等価であり、( ptr + n ) と同等です。 end() .