[转载]C++STL—vector的插入与删除
来源:https://blog.csdn.net/duan19920101/article/details/50717748
vector::erase():从指定容器删除指定位置的元素或某段范围内的元素
vector::erase()方法有两种重载形式
如下:
1、iterator erase(iterator _Where);
v1.erase( v1.begin( ) );//删除v1中的第一个元素
vec.erase(vec.begin()+2);删除第3个元素
2、iterator erase(iterator _First,iterator _Last);
//删除v1.begin() + 1和v1.begin() + 2两个元素
v1.erase(v1.begin() + 1, v1.begin() + 3);
vec.erase(vec.begin()+i,vec.begin()+j);删除区间[i,j-1];区间从0开始
插入元素:vec.insert(vec.begin()+i,a);在第i+1个元素前面插入a;
如果是删除指定位置的元素时:
返回值是一个迭代器,指向删除元素下一个元素;如果是删除某范围内的元素时:返回值也表示一个迭代器,指向最后一个删除元素的下一个元素;
- #include "stdafx.h"
- #include <cv.h>
- #include <vector>
- #include <iostream>
- using namespace std;
- int main()
- {
- using namespace std;
- vector <int> v1;
- vector <int>::iterator Iter;
- v1.push_back(10);
- v1.push_back(20);
- v1.push_back(30);
- v1.push_back(40);
- v1.push_back(50);
- cout << "v1 =";
- for(Iter = v1.begin(); Iter != v1.end(); Iter++)
- cout << " " << *Iter;
- cout << endl;
- v1.erase(v1.begin());//删除v1的第一个元素
- cout << "v1 =";
- for(Iter = v1.begin(); Iter != v1.end(); Iter++)
- cout << " " << *Iter;
- cout << endl;
- //删除v1.begin() + 1和v1.begin() + 2两个元素
- v1.erase(v1.begin() + 1, v1.begin() + 3);
- cout << "v1 =";
- for(Iter = v1.begin(); Iter != v1.end(); Iter++)
- cout << " " << *Iter;
- cout << endl;
- }
v1.erase( v1.begin( ) );//删除v1中的第一个元素
erase的原理,当调用erase()后Iter迭代器就失效了,变成了一野指针。
所以要处理这种问题,关键是要解决调用erase()方法后,Iter迭代器变成野指针的问题,
这个时候呢给他赋一个新的迭代器给他。
for(Iter = v1.begin(); Iter != v1.end(); Iter++)
{
if(*Iter == 10)
{
v1.erase(Iter);
Iter = v1.begin(); //当erase后,旧的容器会被重新整理成一个新的容器
}
}
重新Iter迭代器指定下一个元素。
上面那种方法是给Iter重新赋于新v1的begin迭代器。
还有一种方法是直接赋删除元素的下一个迭代器给Iter
实现方法的代码如下:
for(Iter = v1.begin(); Iter != v1.end(); Iter++)
{
if(*Iter == 10)
{
Iter = v1.erase(Iter);//Iter为删除元素的下一个元素的迭代器
//即第一次这段语句后Iter 会是20,大家可以通过debug调试出来查看下数值
}
if(Iter == v1.end()) //要控制迭代器不能超过整个容器
{
break;
}
}
[转载]C++STL—vector的插入与删除的更多相关文章
- Problem I: STL——多重集的插入和删除
Problem I: STL--多重集的插入和删除 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 1729 Solved: 1258[Submit][ ...
- C++STL——vector类
vector容器 1.1 vector容器的基本概念 Array 是静态空间,一旦配置了就不能改变,要换大一点或者小一 点的空间,可以,一切琐碎得由自己来,首先配置一块新的空间,然后将旧空间的 数据搬 ...
- 转载:C++ vector 类学习笔记
声明:本文转载自http://blog.csdn.net/whz_zb/article/details/6827999 vector简介 vector是STL中最常见的容器,它是一种顺序容器,支持随机 ...
- 【转载】STL 的 erase() 陷阱-迭代器失效总结
下面材料整理自Internet&著作. TL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector .deque):另一类是以不连续的节点形式存储的容器(如:list.se ...
- c++转载系列 std::vector模板库用法介绍
来源:http://blog.csdn.net/phoebin/article/details/3864590 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作 ...
- C++ STL vector容器学习
STL(Standard Template Library)标准模板库是C++最重要的组成部分,它提供了一组表示容器.迭代器.函数对象和算法的模板.其中容器是存储类型相同的数据的结构(如vector, ...
- STL vector
STL vector vector是线性容器,它的元素严格的按照线性序列排序,和动态数组很相似,和数组一样,它的元素存储在一块连续的存储空间中,这也意味着我们不仅可以使用迭代器(iterator)访问 ...
- STL vector用法介绍
STL vector用法介绍 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和f ...
- java三篇博客转载 详解-vector,stack,queue,deque
博客一:转载自http://shmilyaw-hotmail-com.iteye.com/blog/1825171 java stack的详细实现分析 简介 我们最常用的数据结构之一大概就是stack ...
随机推荐
- ThinkPHP5+Bootstrap的极速后台开发框架。
fastamin:https://doc.fastadmin.net/docs/index.html 后台读取mysql 注释,所以要注意mysql中注释的填写规则
- leetcode 207课程表
class Solution { public: bool canFinish(int numCourses, vector<vector<int>>& prerequ ...
- 二、WebSphere Application Server上部署war包并访问
进入我们was服务器控制台之后我们直接按照下图操作: 2.选择要上传的war包,下一步 3.一直下一步,步骤4注意填好“上下文根”,然后继续下一步,直到完成. 4.点击保存到主配置 5.应用程序> ...
- FTP\SFTP连接命令
五.ftp连接 输入:ftp 10.18.49.19 2121六.输入账号密码 zhangsan/sdjg34t#七.输入:ls 查看文件是否上传 如上传 输入:bye ...
- Android开发 互相调用模式之C#主导
首先明确一个概念,当我们不使用Android Studio提供的那些包,仅仅是Unity打包apk,打包出来的apk里面也包含了SDK (1)首先删除Unity下我们创建的Plugins文件夹,因为这 ...
- flask 框架快速入门
flask 框架快速入门 搭建一个简易flask项目 首先使用 Pycharm创建flask项目 运行flask项目 1.使用Pycharm搭建flask项目 (如果Pycharm新建项目中未出现该图 ...
- 守护进程,互斥锁, IPC ,Queue队列,生产消费着模型
1.守护进程 什么是守护进程? 进程是一个正在运行的程序 守护进程也是一个普通进程,意思是一个进程可以守护另一个进程,比如如果b是a的守护进程,a是被守护的进程,如果a进程结束,b进程也会随之结束. ...
- 关于DOM操作的案例
1. 模态框案例 需求: 打开网页时有一个普通的按钮,点击当前按钮显示一个背景图,中心并弹出一个弹出框,点击X的时候会关闭当前的模态框 代码如下: <!DOCTYPE html> < ...
- sftp服务器配置
环境依赖:openssh-server >=4.8 //ssh -V 查看 安装环境: centos6,centos7 1.创建用户组 sftp groupadd sftp 2.创建登录用 ...
- C语言|作业12—学期总结
一. 我学到的内容 二. 我的收获 作业链接 收获 C语言l博客作业01 对这个专业.学科以及markdown语法有了初步了解,打印出了"Hello world!" C语言l博客作 ...