std::vector::insert()イテレータ範囲を受け入れます:
std::vector<int> left(fn(data1));
std::vector<int> right(fn(data2));
data.insert(data.end(), left.begin(), left.end());
data.push_back(mid);
data.insert(data.end(), right.begin(), right.end());
return data;
std::copy()from<algorithm>およびstd::back_inserter()fromを使用することもできます<iterator>:
std::copy(left.begin(), left.end(), std::back_inserter(data));
data.push_back(mid);
std::copy(right.begin(), right.end(), std::back_inserter(data));
ただし、不透明な状態insert()で、入力範囲のサイズとreserve()適切なメモリ量を事前に知ることができます。これは、を繰り返し呼び出すだけです。どちらも線形時間で実行されますが、割り当てが少なくなる可能性があります。back_insert_iteratorpush_back()insert()
ベクトルの要素がコピーよりも移動の方が効率的である場合は、C ++11fromを使用して入力範囲を調整できstd::make_move_iterator()ます<iterator>。
data.insert(data.end(),
std::make_move_iterator(left.begin()),
std::make_move_iterator(left.end()));
data.push_back(mid);
data.insert(data.end(),
std::make_move_iterator(right.begin()),
std::make_move_iterator(right.end()));
私はこれが違いを生むとは思えませんがint。