假设您需要多次使用STL容器(set,map,queue)。哪种一般方法会更好?
// Option 1
void foo()
{
set<int> S; //creating a new S each time foo is called.
//use S...
}
// Option 2
set<int> S;
void foo()
{
S.clear();
//use S...
}
答案 0 :(得分:3)
在没有进行性能测试的情况下,我会告诉您,选项2(重用)稍微更快是直观的,因为您每次都不构建和销毁容器。当你破坏容器时,它必然会清除它,否则会有内存泄漏。
但是,进行性能测试会产生不同的结果:
clear
需要更长时间
析构函数。 总的来说,看来option1稍快一点。我和VS2012,YMMV一起跑步
答案 1 :(得分:0)
假设您不必处理多线程问题,案例2可能更好。主要是因为一些标准的lib容器清除了避免内存分配。具体来看std::vector's clear function的文档。
Clear不会导致内存重新分配,向量的容量不变。