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_iterator
push_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
。