初始化新映射并在c ++中设置

时间:2014-03-31 09:33:13

标签: c++ map set init

嗨,我正在做我的作业,我遇到了问题。

我需要不同的地图并在应用程序中设置,我想重用一些变量。 我有这个全局变量

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> >;

但是任何一直在运行。

有人可以帮助我吗?

3 个答案:

答案 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()