码迷,mamicode.com
首页 > 编程语言 > 详细

【c++】map 迭代器删除示例

时间:2015-07-26 20:59:33      阅读:269      评论:0      收藏:0      [点我收藏+]

标签:c语言   iterator   map   c++   

C++ STL中的map是非常常见的。通常我们用如下方式来遍历,并且删除map中的一些entry:

map<int, int> mp;
mp.insert(make_pair(1,1));
mp.insert(make_pair(2,3)); // insert some elements
for (map<int, int>::iterator iter = mp.begin(); iter != mp.end(); iter++) {
    if (iter->first == 1) mp.erase(iter); // NOTE it is not safe!
    else iter->second++;
}

上面的删除并不安全,因为mp.erase(iter) 之后,iter 的结构已经改变了,此时 for 循环张的 iter++ 可能会出现问题。因此推荐下面的改法:

for (map<int, int>::iterator iter = mp.begin(); iter != mp.end(); ) {
    if (iter->first == 1) mp.erase(iter++); // NOTE it is SAFE!
    else iter->second++;
}

这里的删除时安全的,因为iter在删除前已经会先进行缓存一下,再传给erase去删除。因此 iter++ 是在原先的 iter 基础上进行的。这种方式也是 C++ 文档中推荐的方式。

版权声明:本文为博主原创文章,未经博主允许不得转载。

【c++】map 迭代器删除示例

标签:c语言   iterator   map   c++   

原文地址:http://blog.csdn.net/nisxiya/article/details/47070827

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!