vector删,erase和remove难怪--【STL】
供vector使用容器。通常只是一个简单的遍历查找,其他操作已执行,这不是,今天,稍有不慎。
erase方法的操作是将此时的节点删除,然后指向被删除节点的下一个:
如对数据1 6 6 4 7;
#include <iostream>
#include <vector>
#include <algorithm> using namespace std; int main()
{
vector<int> vec;
vec.push_back(1);
vec.push_back(6);
vec.push_back(6);
vec.push_back(4);
vec.push_back(7); vector<int>::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;
}
进行如上操作的结果为:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGptMTk5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
有一个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 <iostream>
#include <vector>
#include <algorithm> using namespace std; int main()
{
vector<int> vec;
vec.push_back(1);
vec.push_back(6);
vec.push_back(6);
vec.push_back(4);
vec.push_back(7); vector<int>::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
版权声明:本文博客原创文章,博客,未经同意,不得转载。
vector删,erase和remove难怪--【STL】的更多相关文章
- C++——list中erase和remove的区别
1.之前在做相关的操作的时候,涉及到清除list相关的元素,因此会用到erase和remove,那么二者有什么区别呢? 从官方文档中,我们可以获取以下信息 erase : 说明:Removes fro ...
- map 和 vector 的erase函数说明
1. map的erase函数使用 这里首先要注意,C++针对map的erase函数有不同的函数原型,这往往是出现问题的关键所在.根据参考文献1: 在C++98中: (1) void erase (it ...
- BZOJ 2878([Noi2012]-失落的游乐园树DP+出站年轮加+后市展望DP+vector的erase)
2878: [Noi2012]迷失乐园 Time Limit: 10 Sec Memory Limit: 512 MBSec Special Judge Submit: 319 Solved: ...
- 【转】vector中erase()的使用注意事项
vector::erase():从指定容器删除指定位置的元素或某段范围内的元素 vector::erase()方法有两种重载形式 如下: iterator erase( iterator _Whe ...
- 关于vector的erase删除操作的两种不同方法,在linux与visual studio的实现讨论
关于vector的erase删除操作的两种不同方法,在linux与visual studio的实现讨论 1.前言: 最近在做某一个题时,用到了vector的删除操作,利用的是erase()函数删除符合 ...
- vector元素的删除 remove的使用 unique的使用
在vector删除指定元素可用以下语句 : v.erase(remove(v.begin(), v.end(), element), installed.end()); 可将vector中所有值为el ...
- vector中erase用法注意事项
以前就发现了vector中的erase方法有些诡异(^_^),稍不注意,就会出错.今天又一次遇到了,就索性总结一下,尤其是在循环体中用erase时,由于vector.begin() 和vector.e ...
- vector的erase的用法
vector<string>::iterator it = v.erase(v.begin() + 3, v.begin() + 6); 可以直接从begin进行加减,比如我们要移除第3个 ...
- Leetcode 27 Remove Element STL
和remove zero类似的方法完成该题 class Solution { public: int removeElement(vector<int>& nums, int va ...
随机推荐
- PHP通用非法字符检测函数集锦
<? // [变量定义规则]:‘C_’=字符型,‘I_’=整型,‘N_’=数字型,‘L_’=布尔型,‘A_’=数组型 // ※CheckMoney($C_Money) 检查数据是否是 99999 ...
- 【例题3-5 UVA - 1583】Digit Generator
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] for (int i = 1;i <= n;i++) { 算出i是哪一个的生成元. 假设是y. 则ans[y] = min(a ...
- Socket编程模型之完毕port模型
转载请注明来源:viewmode=contents">http://blog.csdn.net/caoshiying?viewmode=contents 一.回想重叠IO模型 用完毕例 ...
- css3-11 如何让html中的不规则单词折行
css3-11 如何让html中的不规则单词折行 一.总结 一句话总结:用word-wrap属性:word-wrap:break-word; 1.word-break和word-wrap的区别? 推荐 ...
- C语言数组初始化的问题
- [AngularFire 2] Protect Write Access Using Security Rules
We cannot allow un-auth user to change the database data as they want, for Firebase, it is easy just ...
- iOS开发SDWebImage的基本使用
#import "ViewController.h" #import "UIImageView+WebCache.h" #import "SDWebI ...
- wPaint在线绘图插件
wPaint在线绘图插件 一.总结 一句话总结: 1.搜画图插件的时候关键词应该搜什么? jquery画图插件 js画图插件 jquery绘图插件 这些 二.在线绘图插件--wPaint 的实际应用 ...
- [RxJS] Split an RxJS Observable into groups with groupBy
groupBy() is another RxJS operator to create higher order observables. In this lesson we will learn ...
- <Linux> Xen虚拟机镜像的安装
了解系统安装在哪个磁盘上:fdisk -l 建立存放虚拟机镜像的目录:mkdir /mnt/vmx 更改文件系统格式: mkfs -t ext4 /dev/sda或者/dev/sdb(系统不在的那个硬 ...