vector::erase 从指定容器删除指定的元素

两个重载:

iterator erase (iterator position);
删除指定位置position的元素,并返回删除元素的下一个元素的迭代器
iterator erase (iterator first, iterator last);
删除从first到last(不包过last)之间的元素 [first,last),并返回last位置迭代器 遍历删除元素方法:
1.

  

  vector<int>array;
  array.push_back();
  array.push_back();
  array.push_back();
  array.push_back();
  array.push_back();
  array.push_back();
  vector<int>::iterator itor;
  for (itor = array.begin(); itor != array.end(); itor++){
    if (*itor == ) array.erase(itor);
  }   for (itor = array.begin(); itor != array.end(); itor++)
  {
    cout << *itor << " ";
  }

这种使用方法会内存错误,因为删除itor指定元素后,itor就编程野指针了,正确使用是itor重新赋值为erase返回值。

2.

      vector<int>array;
  array.push_back();
  array.push_back();
  array.push_back();
  array.push_back();
  array.push_back();
  array.push_back();
  vector<int>::iterator itor;
  for (itor = array.begin(); itor != array.end(); itor++){
    if (*itor == ) itor=array.erase(itor);
  }   for (itor = array.begin(); itor != array.end(); itor++)
  {
    cout << *itor << " ";
  }

这个方式在删除连续元素会错误,结果发现是100 300 300 500,因为itor指向删除元素下一个元素后,itor++就跳过了删除元素的下一个元素。

3.正确使用方式

    vector<int>array;
array.push_back();
array.push_back();
array.push_back();
array.push_back();
array.push_back();
array.push_back();
vector<int>::iterator itor;
for (itor = array.begin(); itor != array.end(); ){
if (*itor == ) itor=array.erase(itor);
else itor++;
}
for (itor = array.begin(); itor != array.end(); itor++)
{
cout << *itor << " ";
}

 

vector erase的更多相关文章

  1. MSDN 中 对vector::erase()的解释.xml

    pre{ line-height:1; color:#f0caa6; background-color:#2d161d; font-size:16px;}.sysFunc{color:#e54ae9; ...

  2. vector::erase returns incompatible iterator in debug build

    关于std::vector中erase的用法http://www.cplusplus.com/reference/vector/vector/erase/ #include <vector> ...

  3. map/vector erase

    问题核心:erase之后迭代器是否失效 vector调用erase之后,该迭代器之后的迭代器都失效: map调用erase之后,其他迭代器并不会失效. vector<int> vecDat ...

  4. C++中使用vector.erase()需要注意的事项

    本人菜鸟一枚.. 今天在用vector.erase()的时候,发现总是不能把应该erase掉的东西erase干净. 举个栗子: vector<int> num_vec; num_vec.p ...

  5. vector.erase用法注意事项

    转自->这里 vector::erase():从指定容器删除指定位置的元素或某段范围内的元素 vector::erase()方法有两种重载形式 如下: iterator erase(iterat ...

  6. vector.erase();vector.clear();map.erase();

    vector::erase()返回下一个iter: STL中的源码: //清除[first, last)中的所有元素 iterator erase(iterator first, iterator l ...

  7. stl vector erase

     C++ Code  12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 ...

  8. C++ 容器 LIST VECTOR erase

     在Vector中 做erase操作就是按照下面的步骤来做的: copy() destory(); 在list容器中 erase操作 destory() deallocate() Vector使用从某 ...

  9. C++ vector erase函数的使用注意事项

    最近使用了顺序容器的删除元素操作,特此记录下该函数的注意事项. 在C++primer中对c.erase(p) 这样解释的:  c.erase(p)    删除迭代器p所指向的元素,返回一个指向被删元素 ...

随机推荐

  1. linux设置别名

    1.查看别名: alias 2.临时设置别名 alias show='ls -al' 3.永久生效 vi 家目录/.bashrc alias mmm='mysql -uroot -p' 4.删除别名 ...

  2. CentOS7 一键安装KMS服务【整理】

    KMS,是 Key Management System 的缩写,也就是密钥管理系统.这里所说的 KMS,毋庸置疑就是用来激活 VOL 版本的 Windows 和 Office 的 KMS 啦.经常能在 ...

  3. 本地如何将svn和git管理的代码做关联

    svn和git都是广为流传的代码版本管理工具,实际项目中往往会将两者结合使用,那么如何将本地的一份代码和两者做有机的关联呢! 前提假设:项目已经在开发阶段中,此时变更了svn代码库的地址:或者是组里来 ...

  4. tomcat开启远程调试和热部署(jrebel)启动tomcat

    @echo off set REBEL_HOME=D:\jrebel\jrebel--nosetup set JAVA_OPTS=-agentpath:%REBEL_HOME%\lib\jrebel6 ...

  5. javaweb之EL自定义函数

    1.什么是EL自定义函数 EL自定义函数是在EL表达式中调用的某个java类的静态方法,这个静态方法需在web应用程序中进行配置才可以被EL表达式调用.EL自定义函数可以扩展EL表达式的功能,让EL表 ...

  6. SZU3

    CodeForces 343A 这是第一题,像这种水题一定不要想复杂,思路不对立马换. 抓住串联和并联,可以用辗转相除法 #include <iostream> #include < ...

  7. DOM节点常见的属性及操作

    (1)常见节点属性 childNodes      子节点 nodeList children      子节点(元素节点) HTMLCollection parentNode       父节点 p ...

  8. Android 保存和恢复activity的状态数据

    一般来说, 调用onPause()和onStop()方法后的activity实例仍然存在于内存中, activity的所有信息和状态数据不会消失, 当activity重新回到前台之后, 所有的改变都会 ...

  9. 【Machine Learning】决策树之简介(1)

    Content 1.decision tree representation 2.ID3:a top down learning algorithm 3.expressiveness of data ...

  10. velecity报错:Caused by: org.apache.velocity.exception.ParseErrorException: Lexical error, Encountered: <EOF> after : "\'/order/pay?activity=\" + activityId);\r\n }*/\r\n</script>\r\n#end\r\n" at /a

    Caused by: org.apache.velocity.exception.ParseErrorException: Lexical error, Encountered: <EOF> ...