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

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

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

vector::erase() vector中如何删除元素?

vector::erase() vector中如何删除元素?
  • duan19920101
  • duan19920101
  • 2016年02月22日 16:38
  • 18204

vector删除元素与清除内存空洞

问题:stl中的vector容器常常造成删除假象,这对于c++程序员来说是极其讨厌的,《effective stl》大师已经将之列为第17条,使用交换技巧来修整过剩容量。 内存空洞这个名词是网上的学...
  • nyist327
  • nyist327
  • 2015年06月04日 11:12
  • 1696

vector, list, map在遍历时删除符合条件的元素

直接看源码,内有详细解释
  • JoeBlackzqq
  • JoeBlackzqq
  • 2014年10月30日 17:16
  • 1456

c++ vector遍历删除元素 出错的问题

使用iterator 遍历时,删除其中一个出了问题,结果是删除了一个以后 不能再用自增了 c++ vector遍历删除元素 一直对vector的删除操作不太熟悉,现整理...
  • beyondlpf
  • beyondlpf
  • 2012年03月14日 15:16
  • 5818

[C/C++标准库]_[初级]_[std::vector的删除元素]

场景: 1.std::vector需要根据条件删除特定的元素。 2.std::vector的iterator在删除后这个iterator是失效的,所以不能直接++iter,这时候只能取erase的返回...
  • infoworld
  • infoworld
  • 2013年11月12日 22:33
  • 4104

vector删除元素后iterator失效

从一个简单的问题开始,删除数组中某个元素后连续重复的元素,例如 1,1,2,3,3,1,1,1,4,0 ---> 1, 2,3,1,4,0。 考虑了几秒,然后就开始动手写代码了: #i...
  • xringm
  • xringm
  • 2016年09月05日 10:36
  • 833

C++ vector 根据元素值删除

本例子, 说明如何删除vector中值或者满足某一函数规律的所有值// 使用 g++ -std=c++11 or clang++ -std=c++11 编译#include #include ...
  • ziqian0512
  • ziqian0512
  • 2017年07月01日 16:23
  • 311

vector中删除任意元素(按序列号,比如程序中删除第4个)

#include "iostream" using namespace std; #include int main() {  vector a;  int b;  for (int ...
  • manji_lee
  • manji_lee
  • 2012年05月14日 10:32
  • 2604

cocos2d一些注意事项及vector删除对象的方法

convertToNodeSpace 不考虑scale的影响 setContentSize只设置内容大小,影响之后的锚点位置,但是不影响绘制效果。超过contentSize的部分继续绘制  setTe...
  • u012944472
  • u012944472
  • 2015年01月30日 19:37
  • 868
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:vector map删除元素
举报原因:
原因补充:

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