ベクトルをベクトルに追加する最良の方法 [重複] 質問する

ベクトルをベクトルに追加する最良の方法 [重複] 質問する
std::vector<int> a;
std::vector<int> b;
std::vector<int> c;

bの要素とcの要素を に追加して、これら 3 つのベクトルを連結したいと思いますa。これを行う最適な方法はどれですか。また、その理由は何ですか。


1)使用方法vector::insert

a.reserve(a.size() + b.size() + c.size());
a.insert(a.end(), b.begin(), b.end());
a.insert(a.end(), c.begin(), c.end());
b.clear();
c.clear();

2)使用方法std::copy

a.reserve(a.size() + b.size() + c.size());
std::copy(b.begin(), b.end(), std::inserter(a, a.end()));
std::copy(c.begin(), c.end(), std::inserter(a, a.end()));
b.clear();
c.clear();

3)std::move(から)を使用することによりC++11

a.reserve(a.size() + b.size() + c.size());
std::move(b.begin(), b.end(), std::inserter(a, a.end()));
std::move(c.begin(), c.end(), std::inserter(a, a.end()));
b.clear();
c.clear();

ベストアンサー1

私の意見では、最初の解決策が最善の方法です。

vector<>::insert要素を追加するように設計されているため、最も適切なソリューションです。

いくらかのスペースを予約するために宛先ベクトルを呼び出すこともできますreserveが、大量のベクトルを追加しない限り、それほど多くの利点は得られないでしょう。追加される要素の数がわかっていれば、1 回の呼び出しvector<>::insertだけを回避できます。reserve

注記: これらがvectorより複雑な型 (カスタム クラスやstd::string) の場合、 を使用するとstd::moveコピー コンストラクターが回避されるため、パフォーマンスが大幅に向上します。intただし、 のベクターの場合は、何の利点もありません。

注2std::move: を使用すると、ソースvectorのコンテンツが使用できなくなることに注意してください。

おすすめ記事