stl::vector拷贝性能分析

--本文为个人理解,如有错误,请批评指正

标准库stl::vector拷贝有几种方式:

① for(int i=0;i<v1.size();++i) {v1[i]=v2[i];} //法1,一个一个元素的复制

② v1.assign(v2.begin(), v2.end()); // 法2,使用assign()函数进行复制

③ v1=v2; // 法3,使用=(拷贝构造函数)进行复制;另外,‘=’运算符的说明可以从这里看:vector::operator= - C++ Reference (cplusplus.com)

结论

“=”最快,一个一个元素拷贝次之,assign()最慢;

实验

#include <iostream>
#include<vector>

using namespace std;


volatile clock_t startt, endt;int main()

{
   vector<int> v1{ 4,5,6 };
    cout << "v1.cap=" <<v1.capacity()<< endl;
    vector<int> v2{ 4,5,6,6,7 ,8,4,7,4,9};
    v1.assign(v2.begin(), v2.end());
 
    // 法一,一个一个元素的复制
    startt = clock();
    for (int i = 0; i < 100000; i++) {
        for (int i = 0; i < v1.size(); ++i) {
            v1[i] = v2[i];
        }
    }
    endt = clock();
    cout << "count=" << (endt - startt) << "ms" << endl;


    // 法2,使用assign()函数进行复制
    startt = clock();
    for (int i = 0; i < 100000; i++) {
        v1.assign(v2.begin(), v2.end());
    }
    endt = clock();
    cout << "count=" << (endt - startt) <<"ms"<< endl;

    // 法3,使用=(拷贝构造函数)进行复制
    startt = clock();
    for (int i = 0; i < 100000; i++) {
        v1=v2;
    }
    endt = clock();
    cout << "count=" << (endt - startt) << "ms" << endl;

}

输出结果

法1耗时:88ms

法2耗时:123ms

法3耗时:53ms

结论

“=”最快,一个一个元素拷贝次之,assign()最慢;

原文链接: https://www.cnblogs.com/luhh/p/15785223.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/184607

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月12日 上午10:45
下一篇 2023年2月12日 上午10:46

相关推荐