前面我们已经讲了对vector的增、查操作,本节将会详细介绍如何对vector进行元素的删除。
下表展示了所有能够进行元素删除的vector的成员函数:
函数 | 参数及介绍 |
---|---|
pop_back() | 参数: 无 介绍: 删除向量的最后一个元素,大小减1,容量不变 |
erase(position) | 参数: const_iterator position 介绍: 删除指定位置的单个元素,返回指向被删除元素之后元素的迭代器 |
erase(first, last) | 参数: const_iterator first, const_iterator last 介绍: 删除 [first, last) 范围内的元素,返回指向最后一个被删除元素之后元素的迭代器 |
clear() | 参数: 无 介绍: 删除所有元素,大小变为0,容量保持不变 |
resize(new_size) | 参数: size_type new_size 介绍: 如果 new_size 小于当前大小,则删除末尾的多余元素 |
以上5种方法可以删除vector中的元素,用的最多的是erase()了,其次是clear()和pop_back(),resize()不是很常用但是需要认识。我现在将他们分为3个测试,你需要仔细阅读我的代码进行学习,然后自己写一遍看看自己是否能够实现这些功能:
#include<bits/stdc++.h> /* 怎么删除vector中的元素 */ using namespace std; /*1.erase()算是最常用的删除元素的成员函数了*/ void test_erase() { cout << "这里是对成员函数erase()删除元素的测试\n"; vector<int> v{1,2,3,4,5}; cout << "原来有" << v.size() << "个元素。\n"; cout << "删除第3个元素belike:\n" ; /*单个元素删除:删除第3个元素*/ v.erase(v.begin()+2) ; for(int i=0;i<v.size();++i)cout << v[i] << " "; cout << '\n'; cout << "删除中间两个元素belike:\n" ; /*多个元素删除:删除中间两个元素*/ v.erase(v.begin()+1,v.begin()+3) ; for(int i=0;i<v.size();++i)cout << v[i] << " "; cout << '\n'; cout << '\n'; } /*2.pop_back()尾删法,也是老朋友了,常用性行一般*/ void test_pop_back() { cout << "这里是对成员函数pop_back()删除元素的测试\n"; vector<int> v{1,2,3,4,5}; cout << "原来有" << v.size() << "个元素。\n"; cout << "进行一次尾删操作后belike:\n" ; /*仅仅只能删除最后一个元素*/ v.pop_back() ; for(int i=0;i<v.size();++i)cout << v[i] << " "; cout << '\n'; cout << '\n'; } /*resize()和clear()最简单*/ void test_easy() { /*resize()*/ cout << "这里是对成员函数resize()和clear()删除元素的测试\n"; vector<int> v{1,2,3,4,5}; cout << "原来有" << v.size() << "个元素。\n"; cout << "通过resize()进行一次容量扩大,我要扩展到10个元素belike:\n" ; /*多出来的空间会有默认值填充*/ v.resize(10) ; for(int i=0;i<v.size();++i)cout << v[i] << " "; cout << '\n'; cout << "通过resize()进行一次容量缩减,我要缩减到3个元素\n"; v.resize(3); for(int i=0;i<v.size();++i)cout << v[i] << " "; cout << '\n'; /*clear()*/ cout << "我现在要对容器进行清空"; v.clear(); cout << "当前容器容量为:" << v.size() << '\n'; } int main(){ test_erase(); test_pop_back(); test_easy(); return 0; }
编译后:
以上就是对vector元素删除的所有方法,erase()函数一定要牢牢记住,它的删除区间是[pos1,pos2),所以不要弄混淆了,其他的都简单,看一遍基本回了。
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程