zoukankan      html  css  js  c++  java
  • 遍历list或map时删除元素(较巧妙)

    #include <iostream>
    #include <list>
    #include <map>
    
    
    using namespace std;
    
    
    int main()
    {
         std::list<int> test_list;
         test_list.push_back(1);
         test_list.push_back(2);
         test_list.push_back(3);
         test_list.push_back(4);
         test_list.push_back(5);
         test_list.push_back(6);
         
         cout << "*****************delete list***************" << endl;
         std::list<int>::iterator iter = test_list.begin();
         for(iter ; iter != test_list.end();)
         {
                  if(*iter % 2 == 0)
                  {
                          test_list.erase(iter++);
                 }else ++iter;
        }
        
        for(iter = test_list.begin(); iter != test_list.end(); ++ iter)
        {
                  cout << *iter << " ";
        }
        cout << endl;
        
        cout << "*****************delete map****************" << endl;
        std::map<int, int> test_map;
        test_map[1] = 1;
        test_map[2] = 2;
        test_map[3] = 3;
        test_map[4] = 4;
        test_map[5] = 5;
        test_map[6] = 6;
        std::map<int, int>::iterator t_iter = test_map.begin();
        for(t_iter; t_iter != test_map.end(); )
        {
                     if(t_iter->second % 2 == 0)
                     {
                                      test_map.erase(t_iter++);
                    }else ++ t_iter;
        }
        
        for(t_iter = test_map.begin(); t_iter != test_map.end(); ++ t_iter)
        {
                  cout << t_iter->second << " ";
        }
        cout << endl;
        
        system("pause");
        return 0;
    }
    比较巧妙的点就在于 test_list.erase(iter++); test_map.erase(t_iter++); 利用后置自增操作符,传给erase函数的iterator是指向当前元素,而在这条语句之后,iter 自增,从而指向下一个元素,而不会导致因当前iterator删除而不能正确访问下一个元素的问题。
     
    运行结果
     
    *****************delete list***************
    1 3 5
    *****************delete map****************
    1 3 5


  • 相关阅读:
    JS检测浏览器Adobe Reader插件
    Java Filter防止sql注入攻击
    log4j的基本配置参数
    Log4j.properties配置详解
    使用Spring进行统一日志管理 + 统一异常管理
    springMVC获取request和response
    深入浅出Mybatis-分页
    PROPAGATION_REQUIRED事务管理
    Java String类型数据的字节长度
    构建高并发高可用的电商平台架构实践
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13318635.html
Copyright © 2011-2022 走看看