C ++在循环中使用std::map
的最佳方法是什么?
代码:
for(int i=0;i<3;i++)
{
std::map<int,int>* m = new std::map<int,int>;
//or ...
std::map<int,int> m;
}
答案 0 :(得分:6)
这不是静态实例;静态实例将使用static
关键字(并且每次循环时都不会创建新关键字。)
这是一个局部变量。
在C ++中,您应该始终优先使用局部变量而不是动态分配。如果你动态分配一个对象(使用new
),那么你必须记住在完成它后删除它,你必须跳过很多环节以确保异常安全。
答案 1 :(得分:6)
除非您真的需要它,否则请避免使用new
,即变量/结构的生命周期与任何调用范围无关。 (如果它“属于”调用函数,则按值返回。)
显然不是这种情况。第二个,更可取的例子叫做局部变量。
我会在
之间做出选择for(int i=0;i<3;i++)
{
std::map<int,int> m;
…
}
和
std::map<int,int> m;
for(int i=0;i<3;i++)
{
…
m.clear();
}
当容器为std::vector
时,通过重用已分配的内存,后者可能会表现得更好。使用map
,区别仅在于样式。