2010-05-12 91 views
3

C++在循环中使用std::map的最佳方式是什么?在C++循环中创建新变量时最好是什么

  • 动态分配
  • 堆栈中分配

代码:

for(int i=0;i<3;i++) 
{ 
    std::map<int,int>* m = new std::map<int,int>; 
    //or ... 
    std::map<int,int> m; 

} 
+2

您可以请大写相关的字母,在您的问题等添加标点符号,所以它类似于正确的英语吗?这将有助于我们在网站上保持质量问题。 – wilhelmtell 2010-05-12 03:20:04

+0

另外请注意:STL中使用的命名空间是'std',而不是'stl'。 – 2010-05-12 09:52:35

回答

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

6

这不是一个静态实例;一个静态实例会使用关键字static(并且每次通过循环都不会创建一个新实例)。

这是一个局部变量。

在C++中,您应该始终倾向于在可能的情况下使用局部变量超过动态分配。如果你动态地分配一个对象(使用new),那么你必须记得在完成对象时删除它,并且你必须跳过很多环节以确保异常安全。

+1

它也有助于避免堆碎片 – 2010-05-12 03:19:14

+2

@Michael:在许多情况下,是的,但在这种情况下,地图中的所有节点都将动态分配,因此不会有太大区别。 – 2010-05-12 03:25:02

相关问题