vector 的 resize 和 clear

beyondlwm 2009-04-03 02:03:05
stl的Vector resize(0) 和clear()
哪一个方法的效率高?为什么!
我看底层都调用了erase方法对容器成员进行析构
而resize比clear多用了两次构造和析构用于拷贝构造局部变量..
...全文
1123 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hzhxxx 2010-06-12
  • 打赏
  • 举报
回复

肯定是 clear了

不用太多判断,直接一个一个删除
zhangwuji154 2010-06-12
  • 打赏
  • 举报
回复
我也有相同的疑惑
必成桂 2009-04-03
  • 打赏
  • 举报
回复
看实现就一目了然了。
下面是SGI的两个函数的实现 :
void clear()
{
erase(begin(), end());
}

void resize(size_type new_size)
{
resize(new_size, T());
}

void resize(size_type new_size, const T& x)
{
if (new_size < size())
erase(begin() + new_size, end());
else
insert(end(), new_size - size(), x);
}

就这个实现来说,clear()和resize(0)的效率是一样的. resize(0)只是多了一个判断,和一个size()调用。size()是常量时间的调用。可以忽略不计。

vector的实现大同小异,应该不会差很多。

对于你这个问题,我觉得两者的效率是差不多的。 clear()显然是一个更直接的用法。









damo_xu 2009-04-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 beyondlwm 的回复:]
关键在于,有师傅级别的人告诉过我,resize效率比clear高,而现在我又不能联系到他...
[/Quote]

有好多江湖师傅滴。嘿嘿,连我都做过别人的师傅。
PS》csdn是出真正师傅的地方。
  • 打赏
  • 举报
回复
http://qzone.qq.com/blog/16237059-1237776814
这应该对你有用
beyondlwm 2009-04-03
  • 打赏
  • 举报
回复
关键在于,有师傅级别的人告诉过我,resize效率比clear高,而现在我又不能联系到他...
「已注销」 2009-04-03
  • 打赏
  • 举报
回复
那效率不就已经出结果了吗:而resize比clear多用了两次构造和析构用于拷贝构造局部变量..

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧