嗨,我正在做我的作业,我遇到了问题。
我需要不同的地图并在应用程序中设置,我想重用一些变量。 我有这个全局变量
map<char,set<char> > IAF; //I Am Father
map<char,int> NBM; //Number Before Me
set<char> WCR; //Who can run
每次在主要我需要重置这个变量。
我做了两件事:
IAF = new map<char,set<char> >;
和
IAF = map<char,set<char> >;
但是任何一直在运行。
有人可以帮助我吗?
答案 0 :(得分:2)
使用
IAF.clear()
NBM.clear()
WCR.clear()
(编辑:对规范和警告的引用)
请注意,如果您要存储指针,clear()
将删除指针,但它不会删除指针所指向的内存。
答案 1 :(得分:1)
map<char,set<char> > IAF;
这是变量的定义。这不是指针。如果您想进行某种初始化,可以使用supported methods之一,例如:
std::copy( differentContainer.begin(), differentContainer.end(), IAF.begin());
或
while( ...) {
IAF.insert( ...);
// or
IAF[ key] = value;
}
删除你可以做的地图内容(这不会自动删除地图中指针所指向的内存 - 如果你存储指针,那么使用智能指针):
IAF.clear();
答案 2 :(得分:0)
除了之前的答案相当清楚。您在某些时候使用的new
关键字是为指针分配内存。
map<char, set<char> > *IAF = new map<char, set<char> >;
//...
// free the memory
delete IAF;
查看Dynamic memory allocation以获取更多信息,并了解何时和 如何使用指针。
另外,使用
IAF = map<char,set<char> >;
不正确。 map<char, set<char> >
是类名(与模板泛型编程相结合,请参阅What is the meaning of "generic programming" in c++?的答案),因此您无法以这种方式将其分配给变量。你想要做的是调用将返回该类实例的构造函数:
IAF = map&gt;();
但是,这样做根本就没有效率。它创建一个临时对象,销毁IAF
,复制临时对象,然后销毁临时对象(除非你使用C ++ 11,在这种情况下你使用move
,但仍然......)。因此,最好使用其他答案所述的clear()
。