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;
}
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;
}
避免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
区别只是风格。
这不是一个静态实例;一个静态实例会使用关键字static
(并且每次通过循环都不会创建一个新实例)。
这是一个局部变量。
在C++中,您应该始终倾向于在可能的情况下使用局部变量超过动态分配。如果你动态地分配一个对象(使用new
),那么你必须记得在完成对象时删除它,并且你必须跳过很多环节以确保异常安全。
它也有助于避免堆碎片 – 2010-05-12 03:19:14
@Michael:在许多情况下,是的,但在这种情况下,地图中的所有节点都将动态分配,因此不会有太大区别。 – 2010-05-12 03:25:02
您可以请大写相关的字母,在您的问题等添加标点符号,所以它类似于正确的英语吗?这将有助于我们在网站上保持质量问题。 – wilhelmtell 2010-05-12 03:20:04
另外请注意:STL中使用的命名空间是'std',而不是'stl'。 – 2010-05-12 09:52:35