你如何迭代C ++地图?

时间:2016-07-22 20:33:19

标签: c++ dictionary stl

例如:

map<string, Person*> family;
family["Bill"] = new Person();
family["Jill"] = new Person();

...

// vvv does not work vvv
for (Person* person: family)
    delete person;

我试图通过地图执行for-each循环以释放所有指针的内存。这适用于矢量,但不适用于地图。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

for( auto const& pair : family )
{
    cout << pair.first << " represented by object at " << (void*)pair.second << "\n";
}

不要使用循环来删除对象,而是考虑直接存储对象而不是指向动态分配对象的指针。

以下是删除所有Person个对象并删除其地图条目的一种方法:

while( not family.empty() )
{
    auto const it = family.begin();
    delete it->first;
    family.erase( it );
}

如果您存储Person个对象(不是指向动态分配对象的指针),则会缩减为

family.clear();