C++如何提高Vector效率的一些方法

C++如何提高Vector效率的一些方法

参考的博客网址:
《STL vector提高效率注意事项与技巧》 https://blog.csdn.net/hyqsong/article/details/50514625
《vector效率低怎么破?》 https://blog.csdn.net/wangshubo1989/article/details/52858523
《两个vector之间复制数据的效率比较试验》 https://blog.csdn.net/myruo/article/details/90238655

1.复制拷贝数据

两个vector拷贝复制数据的方法比较多,对一些常见的方法进行了一下性能测试实验,实验代码如下:

#include <iostream>
#include <ctime>
#include <algorithm>

using namespace std;

int main() {
    int length = 2000000;

    vector<string> vecSrc1, vecSrc2, vecSrc3, vecSrc4, vecSrc5;
    vector<string> vecDes1, vecDes2, vecDes3, vecDes4, vecDes5(length);
    for (int i = 0; i < length; i++)
    {
        vecSrc1.push_back("helloworld");
        vecSrc2.push_back("helloworld");
        vecSrc3.push_back("helloworld");
        vecSrc4.push_back("helloworld");
        vecSrc5.push_back("helloworld");
    }
    clock_t c0;
    //方法1
    c0=clock();
    for (int i = 0; i < length; i++)
    {
        vecDes1.push_back(vecSrc1[i]);
    }
    clock_t c1=clock();

    //方法2 assign
    vecDes2.assign(vecSrc2.begin(),vecSrc2.end());
    clock_t c2=clock();

    //方法3 swap
    vecSrc3.swap(vecDes3);
    clock_t c3=clock();

    //方法4 直接赋值
    vecDes4=vecSrc4;
    clock_t c4=clock();

    //方法5 copy算法
    //vecDes5.resize(vecSrc5.size());
    copy(vecSrc5.begin(),vecSrc5.end(),vecDes5.begin());
    clock_t c5=clock();

    cout << "t1 = " << c1 - c0 << "\nSrc size=" << vecSrc1.size() << "  Dst size=" << vecDes1.size() << endl << endl;
    cout << "t2 = " << c2 - c1 << "\nSrc size=" << vecSrc2.size() << "  Dst size=" << vecDes2.size() << endl << endl;
    cout << "t3 = " << c3 - c2 << "\nSrc size=" << vecSrc3.size() << "  Dst size=" << vecDes3.size() << endl << endl;
    cout << "t4 = " << c4 - c3 << "\nSrc size=" << vecSrc4.size() << "  Dst size=" << vecDes4.size() << endl << endl;
    cout << "t5 = " << c5 - c4 << "\nSrc size=" << vecSrc5.size() << "  Dst size=" << vecDes5.size() << endl << endl;
    
    return 0;
}

运行结果:

t1 = 301
Src size=2000000  Dst size=2000000

t2 = 181
Src size=2000000  Dst size=2000000

t3 = 0
Src size=0  Dst size=2000000

t4 = 182
Src size=2000000  Dst size=2000000

t5 = 22
Src size=2000000  Dst size=2000000

根据实验结果可以看到,效率从高到低分别是:

swap > copy > assign > 直接赋值 > push_back赋值

总结: 这里比较好的是swap和copy,但需要注意的是,swap是内存交换,这里经过swap后,src的内容会与dst发生交换。其次copy也不错,不过需要注意的是,swap需要提前分配好足够的内存,比如在声明是分配或者用resize分配(不能用reserve,二者区别可以去网上查),否则会导致程序崩溃。

由于临时遇到才写的这个,比较赶时间,因此这里暂时不对原因进行过多分析,以后有时间再进行补充。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值