std::vector
データを aからa に設定する最も効率的な方法は何std::valarray
ですか? と がstd::valarray<double> my_valarray;
ありstd::vector<double> my_vector;
、データを から にコピーしたいとしmy_vector
ますmy_valarray
。
オプション 1 (valarray
コンストラクターとコピー代入を使用):
my_valarray = std::valarray(my_vector.data(), my_vector.size());
オプション 2 (サイズ変更とコピー):
my_valarray.resize(my_vector.size());
std::copy(my_vector.begin(), my_vector.end(), std::begin(my_valarray));
どちらの場合も、複雑さがO(2n)であるように見えるため、問題が発生します。最初のケースでは、データは構築中に一時的にコピーされvalarray
(1 回の割り当て + データをコピーするための 1 回のパス)、最終オブジェクトへの割り当て時に (1 回の割り当て + データをコピーするための 1 回のパス) コピーされます。2 番目のケースでは、1 つの割り当て + すべての要素をゼロに初期化するための 1 つのパスと、データをコピーするための別のパスがあります。C++11 の移動セマンティクスは最初のケースに適用され、データをコピーするために 1 つの割り当てと 1 つのパスのみが必要になりますか?