zoukankan      html  css  js  c++  java
  • vector list map set等容器某些函数的使用区别

    map, set, vector erase的正确使用方法

    一、erase 的用法区别

    STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector 、deque);

    另一类是以不连续的节点形式存储的容器(如:list、set、map)。

    在使用erase方法来删除元素时,需要注意一些问题,以避免引起不可预知错误或崩溃。

          在使用 list、set 或 map遍历删除某些元素时可以这样使用
          

        std::list< int> List;
    auto it = List.begin();
    while(it != List.end())
          {
                if( FIND( *itList) )
                {
                   List.erase( itList++);
                }
                else
                   itList++;
          }

     
          在使用 vector、deque遍历删除元素时,也可以通过erase的返回值来获取下一个元素的位置:
         

     std::vector< int> Vec;
          std::vector< int>::iterator itVec;
          for( itVec = Vec.begin(); itVec != Vec.end(); )
          {
                if( FIND( *itVec) )
                {
                     itVec = Vec.erase( itVec);
                }
                else
                   itList++;
          }

    二、排序sort 的区别

    list容器有自己的sort函数,如:

    list<stContact> lst;
    lst.sort([](const stContact& a, const stContact& b) {return a.callCount > b..callCount; });

    vector等容器,需使用 std::sort算法

    vector<stContact> vec;
    std::sort(vec.begin(), vec.end(), [](const stContact& a, const stContact& b){return a.callCount > b.callCount;});
  • 相关阅读:
    TextEdit 使用Mask验证输入格式为邮箱
    大牛博客收藏
    WPF的Dispatcher类里的BeginInvoke,Invoke,InvokeAsync
    DispatcherPriority 枚举
    WPF 线程处理
    Winform UI线程和处理线程交互(进度更新显示)
    C# DataTable 类使用
    string.Format对C#字符串格式化
    C# 线程学习记录
    WPF 控件库
  • 原文地址:https://www.cnblogs.com/pjl1119/p/6840414.html
Copyright © 2011-2022 走看看