STL vector resize()的内存问题
时间:2010-09-17
来源:互联网
代码1:
int main () {
std::vector<int> first;
first.resize(100000);
for (int i=0;i<100000;i++)
{
for (int j=0;j<50000;j++)
{
first[j]=j;
}
}
return 0;
}
代码2.:
int main () {
std::vector<int> first;
for (int i=0;i<100000;i++)
{
for (int j=0;j<50000;j++)
{
first.push_back(j);
}
first.resize(0);
}
return 0;
}
结果代码2比代码1至少快了一倍,不知道是什么原因?
vector resize() 函数是不是每次都需要清空内存,如果不清空的话,速度为什么也会比代码1快一倍? 搞不明白是什么原因。
谢谢!
作者: gridbird 发布时间: 2010-09-17
first[j]=j;和c中指针直接定位是一样的。
作者: phy0077 发布时间: 2010-09-17
我去试试
作者: ydfgic 发布时间: 2010-09-17
作者: davelv 发布时间: 2010-09-17
代码1是空间分配只有一次
代码2在for (int j=0;j<50000;j++)
{
first.push_back(j);
}
这里的空间分配虽然不是每循环一次就分配一次,但是也会是多次分配的
作者: starzhestarzhe 发布时间: 2010-09-17
我也测试了一下,跟你的结果一样。我用的是glibc++,我看了下push_back 和 operaotr[] 的代码,后者比前者要复杂。前者类似直接赋值,后者要先构造一个迭代器。
估计operator[] 操作比push_back慢。
作者: zzyong08 发布时间: 2010-09-17
你把resize换成reserve试试。
作者: donglongchao 发布时间: 2010-09-17
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28