c ++范围内的擦除

时间:2013-09-25 09:48:19

标签: c++ map erase

我想删除地图中除最后两个以外的所有条目。我怎么能这样做?喜欢以下几个?

std::map<int, obj>::iterator firstit = mymap.begin();
std::map<int, obj>::iterator lastit = mymap.end();
lastit--;
lastit--;

mymap.erase (firstit ,lastit);

2 个答案:

答案 0 :(得分:3)

您需要测试iterator是否有效,如果mymap少于2个元素,则代码会调用未定义的行为。

auto it = mymap.begin();
auto size = mymap.size();

if (size > 2)
{
    std::advance(it, size - 2);
}

mymap.erase(mymap.begin(), it);

答案 1 :(得分:0)

假设你的地图中至少有两个条目,我觉得很好。

--lastit;有时声称比lastit--;更有效,因为后者必须创建一个临时迭代器。