use*_*898 3 c++ programming-languages
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;
}
Run Code Online (Sandbox Code Playgroud)
那不是一个静态的例子; 静态实例将使用static关键字(并且每次循环时都不会创建新关键字).
那是一个局部变量.
在C++中,您应该始终优先使用局部变量而不是动态分配.如果您动态分配一个对象(使用new),那么您必须记住在完成它后删除它,并且您必须跳过很多环节以确保异常安全.
new除非你真的需要它,否则要避免,即变量/结构的寿命与任何调用范围无关.(如果它"属于"调用函数,则按值返回.)
这显然不是这种情况.第二个,最好的例子叫做局部变量.
我会在两者之间做出选择
for(int i=0;i<3;i++)
{
std::map<int,int> m;
…
}
Run Code Online (Sandbox Code Playgroud)
和
std::map<int,int> m;
for(int i=0;i<3;i++)
{
…
m.clear();
}
Run Code Online (Sandbox Code Playgroud)
当容器std::vector通过重用分配的内存时,后者可能表现更好.随着map区别只是风格.