前面我们已经讲了对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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程