首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >哪个更快: recreate或clear()?

哪个更快: recreate或clear()?
EN

Stack Overflow用户
提问于 2011-09-09 00:06:16
回答 7查看 922关注 0票数 7

我有一个关于C++中std::vector<>性能的问题。是通过调用clear()方法重用相同的向量更快,还是重新创建向量更快?

下面的例子不是真实的代码,只是为了弄清楚问题是什么:

代码语言:javascript
复制
//Example ONE: is this faster
std::vector<int> foo;
for(int i = 0; i < 100; ++i)
{
    foo.clear();
    for(int j = 0; j < 100; ++j)
    {
        foo.push_back(i+j);
    }
}

//Example TWO: or is that faster?
for(int i = 0; i < 100; ++i)
{
    std::vector<int> foo;
    for(int j = 0; j < 100; ++j)
    {
        foo.push_back(i+j);
    }
}
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-09-09 00:08:26

根据合同,clear()不能释放vector内存,而只是将内部的"size“标志设置为0,因此该方法会更快。

票数 9
EN

Stack Overflow用户

发布于 2011-09-09 00:10:38

这取决于您正在使用的C++标准库中的std::vector实现,但是第一种情况可能会更快,因为当您调用std::vector::clear时,大多数实现实际上不会释放已分配的内存。因此,一旦第一次执行了内部循环,第一个循环就不会执行重复的分配。

票数 2
EN

Stack Overflow用户

发布于 2011-09-09 00:51:19

是。不是的。第一个可能更快。那得看情况。唯一有用的答案来自您在自己的环境中分析自己的代码。

尝试分析您的代码,看看会发生什么。编译your program at ideone显示,对于一个特定的编译器/os/machine/run,您的第一个示例的速度要快4倍。

this program显示了一个中间解决方案,对于这个特定的编译器/os/machine/run,它比#2快,比#1慢。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7351143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档