找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3006|回复: 0
打印 上一主题 下一主题
收起左侧

stl::vector使用心得

[复制链接]
跳转到指定楼层
楼主
ID:3721 发表于 2015-1-5 14:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
1、同类型vector之间拷贝数据使用push_back还是insert
此问题貌似很搞笑,但请看完示例:
const   int   Num   =   5000000;
DWORD   s, d;
vector <int>   v, w( 5000000, 0 );
v.reserve(5000001);
现在将w中的数据全部拷贝到v中,即以下两种情况对比:
s   =   GetTickCount();
for ( int i = 0; i < Num; ++ i )
{
        v.push_back( v[ i ] );
}
d   =   GetTickCount();

s   =   GetTickCount();
v.insert( v.end(), w.begin(), w.end() );
d   =   GetTickCount();
可以自己试试看看d-s的值,请多试几次做做统计,归纳得出insert能省一半左右的时间……
心得:vector之间拷贝数据时批量操作很省时间,但若数据量很少,其实也无所谓,当数据量在10W以下,本身就花不了多少时间。
2、要首尾操作用vector还是deque
这个问题貌似还要搞笑,请继续看完示例:
const   int   Num   =   10000;
int  aaaaaaaa;
DWORD   s, d;
vector <int>   v,
v.reserve(5000001);
deque <int>     q;
现在比较下面两段程序的运行时间:
s   =   GetTickCount();
for   (int   i   =   0;   i   <   6000;   i++)
{
            for   (int   j   =   0;   j  <   Num;   j++)
            {
                    v.push_back(j);
            }
            for   (int  j   =   0;   j   <   Num;   j++)
            {
                    aaaaaaaa = v[j];
            }
            v.erase(v.begin(), v.end() - Num/2);
}
d   =   GetTickCount();

s   =   GetTickCount();
for   (int   i   =   0;   i   <   6000;   i++)
{
            for   (int   j   =   0;   j  <   Num;   j++)
            {
                    q.push_back(j);
            }
            for   (int  j   =   0;   j   <   Num;   j++)
            {
                    aaaaaaaa = q[j];
            }
            q.erase(q.begin(), q.end() - Num/2);
}
d   =   GetTickCount();
对比试验结果,让宣称需要首尾操作首选的deque情何以堪,需要花费vector十倍左右的时间。
有经验的同志们仔细看看就能明白我这里模拟的是什么,对,就是数据采集、读取、删除的不间断操作。当然v.reserve(5000001);语句功不可没啊!vector连续存储,删除起来自然快。
心得:批量处理,我热爱vctor!!!若需要每采集一个数据读取删除一个,那么还是deque占优势的,我这里回避了deque单个处理时的pop_front()函数。
实际使用什么,自然要根据实际情况加以判断,我写这些就是想发泄一下!以前一个老工程师总和我说deque好deque快,首尾操作用deque……可在我们公司的使用现状下,我不觉得deque好在哪。这也算是一个小小的抗议吧……

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表