vector map删除元素

原创 2016年05月30日 16:04:36

一般,我们都是通过迭代器iterator对容器元素进行遍历。

如果需要删除其中的某些元素,需要怎样操作呢? 显然直接erase会导致iterator出错。


对于vector,可以借助erase函数的返回值为“the new location of the element that followed the last element erased by the function call”。

下面是一个实例

void vector_delete_test()
{
std::vector<int> v;
v.push_back(1);
v.push_back(3);
v.push_back(5);
v.push_back(8);
v.push_back(2);


std::vector<int>::iterator it;
for(it = v.begin(); it != v.end();)
{
           if(*it > 2)
          {
               it = v.erase(it); 

         //refer to http://www.cplusplus.com/reference/vector/vector/erase/
           }
       else
       {
        it++;
       }
}


for(it = v.begin(); it != v.end(); it++)
{
printf("%d \n", *it);
}
}

对于map,  可以考虑如下方法
void map_delete_test()
{
std::map<int, int> map;
std::map<int, int>::iterator it;


map[1] = 10;
map[2] = 20;
map[3] = 30;
map[4] = 40;


for(it = map.begin(); it != map.end();)
{
  if(it->second == 30)
  {
   // std::map<int,int>::iterator tmp = it;
   // it++;
   // map.erase(tmp);


  map.erase(it++); 

                 //利用后++的特性

                 //这里首先把it的值传给函数(传参),然后执行++操作,最好执行erase函数
  }
  else
  {
   it++;
  }
}

for(it = map.begin(); it != map.end();)
{
 printf("%d \n", it->second);
 it++;
}
}


int main()
{
   /vector_delete_test();


    map_delete_test();
   

   return 0;
}

相关文章推荐

C++/STL用erase删除元素(vector,deque),(list,set,map)

STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector 、deque);另一类是以不连续的节点形式存储的容器(如:list、set、map)。在使用erase方法来删除元素时...

STL中map/vector的删除元素操作

在我们使用C++中的STL的时候,可以使用迭代器iterator进行遍历,但是当我们通过iterator对vector和map删除元素的时候,要格外的小心,往往操作不当,导致iterator失效,后果...

C++ vector删除元素

当要删除迭代器中满足指定条件的元素时,如果运用不熟练经常容易出现错误,erase函数删除指定元素后返回的是指向删除元素的下一个元素的指针,如果不能应用好这一点,那么就会出现如下错误。 ...
  • gu_gu_
  • gu_gu_
  • 2016年08月17日 10:21
  • 350

c++ vector删除元素

现在用stl的人越来越多, stl确实是套很漂亮的算法和数据结构库. 但是初用stl的人往往会遇上很多问题. 从一个容器中删除元素,是很常用的操作,但是也是初学者常会犯错误的地方,删除map和lis...
  • ltx06
  • ltx06
  • 2014年04月09日 21:07
  • 363

vector用erase连续删除元素怎么会出错

vector用erase连续删除元素怎么会出错 vector vt;  for (int i = 0; i { vt.push_back(i); } vector::iterat...

设计实现mini_vector中的插入和删除算法,要求在指定位置插入、删除元素

源代码 #ifndef MINI_VECTOR   #define MINI_VECTOR   #include    #include "d_except.h" // include ...

list/map中安全删除元素

最近遇到在map中删除元素安全性的问题,于是查了查资料,记录一下。 问题的引出:一个关于list::erase()的问题。 写了个小程序试验list在erase一个成员之后iterator 值...

map的遍历及删除元素

map中有两种遍历方式,entrySet及keySet,使用时视具体情形定。 entrySet:同时取到key和value; keySet:先取key值,再根据key得到value. 如果需要删...

遍历list或map时删除元素(较巧妙)

#include #include #include using namespace std; int main() { std::list test_list; t...
  • educast
  • educast
  • 2013年10月22日 19:08
  • 736

C++ set map list的正确删除元素方法

转自:点击打开链接 STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector 、deque);另一类是以不连续的节点形式存储的容器(如:list、set、map)。在...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:vector map删除元素
举报原因:
原因补充:

(最多只允许输入30个字)