在C中,给定矢量< T> src,dst,都已经排序了,是否有一个更有效的方式来合并src的内容到dst
size_t n = dst.size(); dst.insert(dst.end(),src.begin(),src.end()); std::inplace_merge(dst.begin(),dst.begin() + n,dst.end());
?在我关心的情况下,T是一个小的(12-16字节,取决于ABI)POD结构,但每个向量包含数百万个元素,所以播放的内存总量是几十到几百兆字节.
解决方法
我至少会尝试:
std::vector<T> tmp; tmp.reserve(src.size() + dst.size()); // commenters are probably right about this std::merge(src.begin(),src.end(),dst.begin(),dst.end(),std::back_inserter(tmp)); src.swap(tmp);
但我怀疑这在很大程度上取决于T的性质,src和dst的大小,以及为什么我们需要优化.