前面我们已经讲了对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),所以不要弄混淆了,其他的都简单,看一遍基本回了。


点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)