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
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。