在c ++中在循环中创建新变量时更好

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)

Jam*_*lis 6

那不是一个静态的例子; 静态实例将使用static关键字(并且每次循环时都不会创建新关键字).

那是一个局部变量.

在C++中,您应该始终优先使用局部变量而不是动态分配.如果您动态分配一个对象(使用new),那么您必须记住在完成它后删除它,并且您必须跳过很多环节以确保异常安全.

  • @Michael:在许多情况下,是的,但在这种情况下,地图中的所有节点都将动态分配,因此不会有太大的差别. (2认同)

Pot*_*ter 6

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区别只是风格.