哪种方法更快并且开销更少?
方法一:
void foo() {
std::vector< int > aVector;
for ( int i = 0; i < 1000000; ++i ) {
aVector.clear();
aVector.push_back( i );
}
}
方法二:
void foo() {
for ( int i = 0; i < 1000000; ++i ) {
std::vector< int > aVector;
aVector.push_back( i );
}
}
你可能会说这个例子毫无意义!但这只是我的大代码中的一个片段。简而言之,我想知道是否更好
“创建一个向量一次并清除它以供使用”
or
“每次创建一个新向量”
UPDATE
感谢您的建议,我测试了两者,结果如下
方法一:
$ time ./test1
real 0m0.044s
user 0m0.042s
sys 0m0.002s
方法二:
$ time ./test2
real 0m0.601s
user 0m0.599s
sys 0m0.002s
清除向量会更好。也许这对其他人有帮助:)
The clear()
最有可能更快,因为您将保留为先前分配的内存push_back()
s 进入向量,从而减少分配的需要。
此外,您还消除了每个循环 1 次构造函数调用和 1 次析构函数调用。
这完全忽略了编译器优化器可能对此代码执行的操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)