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

  • 相关阅读:
    大文件上传插件
    大文件上传解决方案
    up7-文件保存位置
    up6-自定义文件存储路径
    up7.1-asp.net-本地测试教程
    文件上传控件产品比较
    IIS支持解析json
    IE8控件安装方法
    IE9控件安装方法
    gets()函数详解和缺陷
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/7240689.html
Copyright © 2011-2022 走看看