zoukankan      html  css  js  c++  java
  • 【c++】map 迭代器删除演示样例

    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++ 文档中推荐的方式。

  • 相关阅读:
    二分 || UOJ 148 跳石头
    等边n边型
    激光样式
    n个数中选k个数和为sum
    引爆炸弹
    光盘行动
    (二分)分蛋糕问题
    总结
    个人测试
    第三次团队作业
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/7240689.html
Copyright © 2011-2022 走看看