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;});

 

posted on 2017-05-11 12:48  Love流浪的猪  阅读(236)  评论(0编辑  收藏  举报