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 ...
随机推荐
- Java中使用org.json和json-lib解析JSON
文章目录 [隐藏] 一.JavaProject中org.json解析JSON 1.JSON的org.son-api下载 1)JSON网址 2)JSON的java解析org.json-api网址 3) ...
- 无意中发现Markdown,最终解放了我
文件夹 概述 换行 删除线 链接自己主动识别 表格 代码块高亮 定义列表 脚注 自己主动生成文件夹 參考资料 正文 概述 大部分情况下,Markdown的基本的语法已够我们使用,比方随性记录点东西.非 ...
- CentOS7.1 KVM虚拟化之虚拟机快照(5)
这里用之前克隆的虚拟机vm1-clone进行快照操作 注: 1.快照实际上做的是虚拟机的XML配置文件,默认快照XML文件在/var/lib/libvirt/qemu/snapshot/虚拟机名/下 ...
- SendMessageTimeout 的使用
在WINDOW编程中,发送消息的常用API有SendMessage,PostMessage,PostThreadMessage. 一般每个线程有两个队列:一个用来接收通过Send函数的消息,另外一个队 ...
- Android组件——使用DrawerLayout仿网易新闻v4.4侧滑菜单
摘要: 转载请注明出处:http://blog.csdn.net/allen315410/article/details/42914501 概述 今天这篇博客将记录一些关于DrawerL ...
- js进阶 11-4/5 jquery中css的类的操作有哪些
js进阶 11-4/5 jquery中css的类的操作有哪些 一.总结 一句话总结:jquery中css的类的操作有增删切三种. 1.jquery中css的类的操作有哪些? 增删切三种 addCla ...
- JavaScript学习笔记八
本文依据慕课网课程<JavaScript进阶>学习整理 第8章 浏览器对象 8-1 window对象 window对象是BOM的核心.window对象指当前的浏览器窗体. wind ...
- java--css+js做的树形菜单(完整版)
jsp页面: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8 ...
- 简单sql部分强化练习题
简单查询部分sql练习题 -- 选择部门30中的全部职工 select * from emp where deptno = 30; -- 列出全部业务员(CLERK)的姓名,编号,和部门编号 sele ...
- tensorflow 的使用流程
1. optimizer.minimize 与 global_step optimizer = tf.train.**(learning_rate) global_step = tf.Variable ...