erase()的使用
来源:互联网 发布:领啦试用网站源码 编辑:程序博客网 时间:2024/06/03 21:59
通常,remove()和erase()联合使用:remove的返回值作为erase()的第一个参数。
vector<int> veci;veci.push_back(1);veci.push_back(2);veci.push_back(3);veci.push_back(4);veci.push_back(5);veci.push_back(3);veci.push_back(2);veci.push_back(3);veci.erase(remove(vec.begin(), vec.end(), 3),vec.end()); //这样把veci中的3删除//cout<<veci.size(); 输出5
erase(): 删除指定位置的元素后,返回值是一个迭代器,指向删除元素下一个元素!
有两种形式:删除指定位置的元素:erase(iterator position);
删除某一段的元素:erase(iterator first, iterator last);
法1:
for(vector<int>::iterator iter=veci.begin();iter!=veci.end(); iter++){ if( *iter == 3) veci.erase(iter);//veci.erase(it)之后,iter变成一个野指针,不能进行++。}
修改:
for(vector<int>::iterator iter=veci.begin();iter!=veci.end();){ if( *iter == 3) { iter0=iter; veci.erase(iter0); //cout<<*iter; 输出4 //在执行完删除后,iter此时指向下一个元素 } iter++;}
这段代码也是错误的:
1)无法删除两个连续的"3"; (iter0在erase()之后失效)
2)当3位于vector最后位置的时候,也会出错(在veci.end()上执行 ++ 操作)
为了能够删除连续的3,使用remove函数:STL中remove()只是将待删除元素之后的元素移动到vector的前端,而不是删除。若要真正移除,需要搭配使用erase()。
如:
vector<int> vec = {1,1,2,3,4,5,6,7,8,9}remove(vec.begin(), vec.end(), 1);
结果如下
vec = {2,3,4,5,6,7,8,9,1,1};
修改:
vec.erase(remove(vec.begin(), vec.end(), 1),vec.end());
结果:
vec.erase(remove(vec.begin(), vec.end(), 1),vec.end());
阅读全文
0 0
- erase的使用
- v.erase的使用
- map::erase的使用
- erase的正确使用
- erase()的使用
- stl erase 的正确使用
- 关于vector的erase使用
- erase方法的正确使用
- 容器erase删除的使用
- 关于map的erase方法的使用
- C++中string erase函数的使用
- VC2008中Vector的erase使用
- C++中string erase函数的使用
- 正确使用stl map的erase方法
- 正确使用stl map的erase方法
- C++ STL容器中erase的使用
- 正确使用stl map的erase方法
- STL Vector remove()和erase()的使用
- log4j2 xml配置调用
- springmvc全局异常处理器的配置
- 2186. 猴子拆房
- 解析URL
- MySQL 性能优化
- erase()的使用
- Oracle PL/SQL开发基础(第三十六弹:异常处理的一些经验)
- 12.接口:implements
- junit5相关依赖的写法
- Leaf Classification
- sklearn中文api翻译
- 各种排序算法的积累
- ServiceWorker
- 2017.08.15总结