vector效率低怎么破?

大部分C++开发者,使用vector完全替代了数组。

但有时候,vector浪费了很多的时间,即效率低下。

譬如说:
vector不会自动decrease,即使调用了clear()方法。这个时候,我们可以使用swap方法,还好c++11为我们提供了shrink_to_fit方法。
之前也有介绍过,看这里《正确释放vector内存》http://blog.csdn.net/wangshubo1989/article/details/50359750

其实,我们遇到更多的问题是,vector的构造方式太多,很多时候,是这个原因导致的效率低下。

先热身一下,写一个new数组:

int * big_array = new int[N];
for (unsigned int k = 0; k < N; k++)
{
  big_array[k] = k;
}
int sum = total(big_array, N);
delete [ ]big_array;
return sum;

用vector重写:

vetor<int> big_array(N);
for (unsigned int k = 0; k < N; k++)
{
  big_array[k] = k;
}
int sum = total(big_array, N);
return sum;

这里就明确了,上面的vector代码效率不是很高,因为先是构造一个size为N的big_array,然后把N个元素初始化为0,又对N个元素进行了重新赋值。

那你可以说,如果我不传N呢,不指定vector的大小,vector不是动态的吗?

vetor<int> big_array;
for (unsigned int k = 0; k < N; k++)
{
  big_array.push_back(k);
}
int sum = total(big_array, N);
return sum;

如果你了解vector是怎么分配内存的,你就不会写出上面的代码,因为效率实在低下。
一言以蔽之:vector内存不够用的时候,分配二倍的空间,然后把之前的copy到新的空间中。

那如果我们大概知道vector的大小,就可以提前分配了:

vetor<int> big_array;
big_array.reserve(N);
for (unsigned int k = 0; k < N; k++)
{
  big_array.push_back(k);
}
int sum = total(big_array, N);
return sum;

这里有个提示:
别混淆了resize和reserve :
http://blog.csdn.net/wangshubo1989/article/details/50322489

有的时候,可以使用emplace_back代替push_back:
http://blog.csdn.net/wangshubo1989/article/details/50357549

这里写图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一苇渡江694

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值