【c++】vector中删除元素
1.删除指定范围的元素
- vector删除元素之pop_back(),erase(),remove()
向量容器vector的成员函数
pop_back()
可以删除最后一个元素.而函数
erase()
可以删除由一个iterator指出的元素,也可以删除一个指定范围的元素。还可以采用通用算法
remove()
来删除vector容器中的元素.不同的是:采用remove一般情况下不会改变容器的大小,而pop_back()与erase()等成员函数会改变容器的大小。
- C++ STL vector删除元素的几种方式(超级详细)(推荐!!!)
示例看上面的链接。
2.删除指定大小的元素
1. 方法一:
由于上面的删除方法都是只能删除指定的迭代器指定的位置元素,所以如果需要删除指定大小的元素则需要先找到其迭代器,不同于map(map有find方法),vector本身是没有find这一方法,其find是依靠algorithm来实现的。
给个例子:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{vector<int> vec;for(int i=0;i<10;i++){vec.push_back(i);}for(int i=0;i<vec.size();i++){cout << vec[i] <<' ';}cout<<endl;vector<int>::iterator it = find(vec.begin(), vec.end(), 2);// vec.erase(vec.begin()+5);//erase the 6th elementvec.erase(it);for(int i=0;i<vec.size();i++){cout << vec[i] << ' ';}cout<<endl;return 0;
}
运行结果:
0 1 2 3 4 5 6 7 8 9
0 1 3 4 5 6 7 8 9
- 方法二:
摘抄自:对vector删除元素的效率比较
最近在看github上的开源代码,看到了vector删除元素的操作,如(1)所示
(1)、先用swap把要删除的元素和vector里最后一个元素交换位置,然后把最后一个元素pop_backstd::swap(*it, observers_.back()); observers_.pop_back();
我平时删除vector上的元素跟(2)是一样的
(2)、先用find查找元素,然后用erase删除元素Iterator it = std::find(observers_.begin(), observers_.end(), x); observers_.erase(it);
1的效率高,2删除元素后需要把后面的元素依次向前移动,但有时会要求不能改变vector中元素顺序,此时只能使用2
【c++】vector中删除元素相关推荐
- C++ vector中删除元素
vector中删除指定元素 //删除指定元素vector<int> v = {1,2,3,4,5,6,7,8,9,10,5,5,5};printf("v size:%d\n&qu ...
- vector中删除元素后,如何有效的释放无效元素的内存
.erase()只是删除了元素内容,并不能改变容量大小: 举例: 35 void testvector() 36 { 38 vector v; 39 v.push_back(1); 4 ...
- 使用迭代器从map或vector中删除元素
std:map的迭代器:删除时只影响当前元素 #include "stdafx.h" #include <map>std::map<int, int> m; ...
- C++从vector中删除指定元素
①只删除一个元素 vector<int> num;for(vector<int>::iterator iter=num.begin();iter!=num.end();iter ...
- 如何在C ++中从容器中删除元素
How to remove elements from container is a common C++ interview question, so you can earn some brown ...
- 【重难点】【Java集合 02】Set、List、Map 的区别、常见的线程安全的集合类、Collection 为什么只能在 Iterator 中删除元素
[重难点][Java集合 02]List.Set.Map 的区别.常见的线程安全的集合类.Collection 为什么只能在 Iterator 中删除元素 文章目录 [重难点][Java集合 02]L ...
- 从PHP中的数组中删除元素
有没有一种简单的方法可以使用PHP从数组中删除元素,以便foreach ($array)不再包含该元素? 我认为将其设置为null可以做到,但是显然不起作用. #1楼 如果您有一个数字索引的数组,其中 ...
- C# - 在foreach中删除元素
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 在for ...
- List与Map的遍历过程中删除元素
在日常的开发过程中,经常需要对List或Map里面的符合某种业务的数据进行删除,但是如果不了解里面的机制就容易掉入"陷阱"导致遗漏或者程序异常. List遍历过程中删除元素 使用索 ...
最新文章
- 1675: [Usaco2005 Feb]Rigging the Bovine Election 竞选划区(题解第二弹)
- python文字冒险游戏_模拟射击文字类游戏(Python)
- “生骨肉”概念加速奔跑,宠物行业真要起飞了?
- 从补码的来源剖析到为啥补码=原码按位取反+1
- LeetCode 32 最长有效括号
- 中国区块链开发者的热血时代来临!
- 后端研发菜鸟成长记 第一章 入门 之 存活下来
- 自动阅读行业又出新招?离线阅读脚本套路满满
- Drawable的setBounds方法
- 身为一名合格root管理员的基本防范措施 Linux系统安全及应用
- Ubuntu操作系统输入法键位错乱解法记录(输入法无法正确打出~、等字符)
- 人生理财规划必备的“四笔钱”,你知道吗?
- python代码格式怎么写比较好
- 51单片机定时器扫描按键
- Ubuntu16.04下安装QQ
- 麓言信息平面设计可以转行UI设计吗?
- 微信 40003 问题解决思路汇总
- XP组策略提示MMC无法创建管理单元
- 台式计算机中的cpu是什么,台式机cpu和笔记本电脑cpu有什么区别
- 一套即学即用,受益终身的效率思维
热门文章
- linux协议栈网桥部分之cam表操作,linux协议栈之网桥实现之一
- 考研阅卷大揭秘!这些“内幕”你知道吗?
- GPDB插件安装工具之gppkg
- 怎么解决访问所有HTTPS网站显示连接不安全
- 【PyTorch基础教程29】DIN模型
- 2022年最新天津水利水电施工安全员考试题库及答案
- HTTPS下导出Excel, ie浏览器报“IE 无法下载 无法打开该站点” 解决办法
- Java 语言程序设计基础(笔记一) ( 专升本自考 ,九天速成 )
- 2019无人驾驶大盘点:百度Apollo已经率先出线
- UI自动化测试-pytest框架