我有一个关于C++中std::vector<>性能的问题。是通过调用clear()方法重用相同的向量更快,还是重新创建向量更快?
下面的例子不是真实的代码,只是为了弄清楚问题是什么:
//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);
}
}发布于 2011-09-09 00:08:26
根据合同,clear()不能释放vector内存,而只是将内部的"size“标志设置为0,因此该方法会更快。
发布于 2011-09-09 00:10:38
这取决于您正在使用的C++标准库中的std::vector实现,但是第一种情况可能会更快,因为当您调用std::vector::clear时,大多数实现实际上不会释放已分配的内存。因此,一旦第一次执行了内部循环,第一个循环就不会执行重复的分配。
发布于 2011-09-09 00:51:19
是。不是的。第一个可能更快。那得看情况。唯一有用的答案来自您在自己的环境中分析自己的代码。
尝试分析您的代码,看看会发生什么。编译your program at ideone显示,对于一个特定的编译器/os/machine/run,您的第一个示例的速度要快4倍。
this program显示了一个中间解决方案,对于这个特定的编译器/os/machine/run,它比#2快,比#1慢。
https://stackoverflow.com/questions/7351143
复制相似问题