博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
vector删,erase和remove难怪--【STL】
阅读量:6263 次
发布时间:2019-06-22

本文共 1958 字,大约阅读时间需要 6 分钟。

vector使用容器。通常只是一个简单的遍历查找,其他操作已执行,这不是,今天,稍有不慎。

erase方法的操作是将此时的节点删除,然后指向被删除节点的下一个:

如对数据1 6 6 4 7;

#include 
#include
#include
using namespace std;int main(){ vector
vec; vec.push_back(1); vec.push_back(6); vec.push_back(6); vec.push_back(4); vec.push_back(7); vector
::iterator arr; //vec.erase(remove(vec.begin(), vec.end(), 6), vec.end()); for(arr = vec.begin(); arr != vec.end(); arr++) { if(6 == *arr) { vec.erase(arr); //arr--; } } cout << "The size of vector is :" << vec.size() << endl; for(arr = vec.begin(); arr != vec.end(); arr++) { cout << *arr << " "; } cout << endl; return 0;}
进行如上操作的结果为:

有一个6未成功删除,因为每次循环后都将迭代器arr++,在成功删除之后节点后移了一位。实际上在删除进行时是后移了两位,故而在删除时:

for(arr = vec.begin(); arr != vec.end(); arr++)    {        if(6 == *arr)        {            vec.erase(arr);            arr--;        }    }
有了arr--操作,就可抵消删除时的自己主动后移。从而成功进行:

当然,erase还有另外一个方法,就是删除两个节点之间的所有元素。这时依靠remove操作将等于删除值的节点所有移到容器末尾。进行删除;

将上述for循环删除的凝视,将其上一行的vec.erase(remove(vec.begin(), vec.end(), 6), vec.end());凝视取消就可以实现;

#include 
#include
#include
using namespace std;int main(){ vector
vec; vec.push_back(1); vec.push_back(6); vec.push_back(6); vec.push_back(4); vec.push_back(7); vector
::iterator arr; vec.erase(remove(vec.begin(), vec.end(), 6), vec.end()); // /*for(arr = vec.begin(); arr != vec.end(); arr++) { if(6 == *arr) { vec.erase(arr); arr--; } }*/ cout << "The size of vector is :" << vec.size() << endl; for(arr = vec.begin(); arr != vec.end(); arr++) { cout << *arr << " "; } cout << endl; return 0;}

O(∩_∩)O

版权声明:本文博客原创文章,博客,未经同意,不得转载。

你可能感兴趣的文章
如何将ST05生成的trace导入HANA Studio里并以图形化方式显示出来
查看>>
TiDB 在西山居实时舆情监控系统中的应用
查看>>
说一说 JVM 对锁的优化
查看>>
图像处理库GPUImage简单使用
查看>>
基于Java语言构建区块链(五)—— 地址(钱包)
查看>>
Elastic Search 安装和配置
查看>>
手动实现 express
查看>>
Let's Encrypt免费ssl证书安装使用详解
查看>>
有个功能丰富的 react 脚手架,了解下?
查看>>
SnippetsLab - 像纳博科夫写小说一样写代码
查看>>
React-Redux 源码解析 二(middleware)
查看>>
JLRoutes 实现原理分析
查看>>
第二章 OC程序设计
查看>>
初识Python
查看>>
关于dispatch_once的坑及注意点
查看>>
TreeMap之元素插入
查看>>
Vue二次封装axios为插件使用
查看>>
es6中export和export default的作用、区别
查看>>
Toast通知栏权限填坑指南
查看>>
LeetCode39.组合总和 JavaScript
查看>>