C++将一个vector中的内容复制到另一个vector结尾。
可以参考:https://www.codingdict.com/questions/95161
template < typename T, typename RAIt >
void append(RAIt src_begin, RAIt src_end, std::vector<T>& dst,
std::random_access_iterator_tag)
{
auto src_size = src_end - src_begin;
dst.resize( dst.size() + src_size );
// copy is not required to invoke capacity checks
std::copy( src_begin, src_end, dst.end() - src_size );
// ^this^ should move with the example provided above
}
template < typename T, typename FwdIt >
void append(FwdIt src_begin, FwdIt src_end, std::vector<T>& dst)
{
append( src_begin, src_end, dst,
typename std::iterator_traits<FwdIt>::iterator_category() );
}
template < typename T, typename FwdIt >
void append_move(FwdIt src_begin, FwdIt src_end, std::vector<T>& dst)
{
append( std::make_move_iterator(src_begin),
std::make_move_iterator(src_end),
dst );
}
int main() {
// 构造6亿数据
std::vector<int> tmp;
tmp.reserve(600000000);
for (int i = 0; i < 600000000; i++) {
tmp.emplace_back(i);
}
{
CostTime cst1("insert");
std::vector<int> tmp3;
tmp3.insert(tmp3.end(), tmp.begin(), tmp.end());
}
{
CostTime cst1("insert + reserve");
std::vector<int> tmp5;
tmp5.reserve( tmp5.size() + (tmp.end() - tmp.begin()) );
tmp5.insert(tmp5.end(), tmp.begin(), tmp.end());
}
{
CostTime cst1("std::copy");
std::vector<int> tmp4;
append_move(tmp.begin(), tmp.end(), tmp4);
}
return 0;
}
测试结果:
insert real time = 0.680548s
insert + reserve real time = 0.697221s
std::copy real time = 1.95619s
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(0)