【超详细】C++ vector 详解 + 例题,这一篇就够了

没人会在意你努力的过程, 他们只会看你最后站在什么位置!在繁华中自律,在落魄中自愈!!!

写在前面:

本文是对C++中的vector容器进行一个知识总结,其中包含了对vector向量的各种操作;除此之外,本文还对每一个内置函数,如erase()、assign()等函数设置了解释程序用来演示本函数用法;错误展示也在本文中有所涉猎;最后学完知识点后,本文最后有例题,可以进行学习验证与刷题巩固!!!


向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。

一、头文件

使用 vector 之前需要添加头文件

#include <vector>

二、容器特性

1.顺序序列

顺序容器中的元素按照严格的线性顺序排序。可以通过元素在序列中的位置访问对应的元素。

2.动态数组

支持对序列中的任意元素进行快速直接访问,甚至可以通过指针算述进行该操作。提供了在序列末尾相对快速地添加/删除元素的操作。

3.能够感知内存分配器的(Allocator-aware)

容器使用一个内存分配器对象来动态地处理它的存储需求。

三、vector数组初始化

尖括号为元素类型名,它可以是任何合法的数据类型,下面我全用int举例。

1、定义空向量
vector<int> a;  //相当于空数组
2、定义具有10个整型元素的向量
vector<int> a(10); //相当于a[10]
3、定义具有10个整型元素的向量,且赋予每个元素初值为1
vector<int> a(10,1); //相当于a[10] = {1}
4、定义与向量b具有相同值的向量a
vector<int> a(b); //将向量b赋值给向量a,即向量a等于向量b
5、将向量b中下标0-2(共三个)的元素赋值给a
//第一个数据是起始地址,第二个数据是结束地址(不包括),第二个数据就是你要截取的长度加1
vector<int> a(b.begin(), b.begin()+3); 
6、从数组中获得初值
int b[7] = {
   1,2,3,4,5,6,7}; //定义整形数组

vector<int> a(b, b+7; //将数组b赋值给a,第一个数据是起始地址,第二个数据是结束地址(不包括)
7、二维数组初始化
vector<vector<int>> a;  //初始化为int型二维数组,相当于int a[][]

四、vector 对象常用内置函数

首先定义两个vector向量,进行下面函数演示:

vector<int> a, b;
1、assign() 函数:可对已定义好的vector向量进行赋值
//将b的下标为0-2的元素赋值给向量a
a.assign(b.begin(), b.begin()+3);

//使向量a变为长度为4且值为2
a.assign(4,2);

测试用例:

int main(){
   
	a.assign(5, 3);
	for(int i = 0; i < a.size(); i++){
   
		cout << a[i] << " ";
	}
	cout << endl;
	a.assign(4, 2);
	for(int i = 0; i < a.size(); i++){
   
		cout << a[i] << " ";
	}
	return 0;
} 

//输出:
3 3 3 3 3
2 2 2 2
2、back() 函数
a.back();  //返回a的最后一个元素
3、front() 函数
a.front();  //返回a的第一个元素
4、取向量a中第i个数据
a[i]; //返回a的第i元素,当且仅当a存在
5、clear() 函数
a.clear(); //清空a中的元素
6、empty() 函数
a.empty(); //判断向量a是否为空,若为空空则返回true,非空则返回false
7、push_back() 函数
a.push_back(5); //在向量a的最后插入一个元素,其值为5
8、pop_back() 函数
a.pop_back(); //删除a向量的最后一个元素

测试用例:

int main(){
   
	a.push_back(1);
	a.push_back(2);
	a.push_back(3);
	a.push_back(4);
	a.push_back(5);
	cout << "使用push_back压入函数后:";
	for(int i = 0; i < a.size(); i++){
   
		cout << a[i] << " ";
	}
	cout << endl << endl;
	cout << "使用pop_back删除函数后:";
	a.pop_back(); 
	a.pop_back();
	for(int i = 0; i < a.size(); i++){
   
		cout << a[i] << " ";
	}
	return 0;
} 

//输出:
使用push_back压入函数后:1 2 3 4 5
使用pop_back删除函数后:1 2 3
9、erase() 函数

erase可以删去容器中指定位置的元素,容器的size(大小)会改变,但是容器的容量不变。

//删除a向量中全部元素
a.erase(a.begin(), a.end());

//删除a向量中下标0-2共三个元素
a.erase(a.begin(), a.begin()+3);

测试程序:

int main(){
   
	for(int i = 1; i < 5; i++) a.push_back(i); //输入数据
	cout << "使用erase删除前:" ; 
	for(int i = 0; i < a.size(); i++){
   
		cout << a[i] << " ";
	}
	cout << endl;
	a.erase(a.begin(), a.begin() + 3);
	cout << "使用erase删除后:";
	for(int i = 0; i < a.size(); i++){
   
		cout << a[i] << " ";
	}
	return 0;
} 

//输出:
使用erase删除前:1 2 3 4 5
使用erase删除后:4 5
10、insert() 函数
//在a向量第二个元素(下标从0开始)后插入 8
a.insert(a.begin()+2, 8);

//在a向量的第二个元素(下标从0开始)后插入3个数,其值都为5
a.insert(a.begin()+1, 3, 8);

//b为数组,在a的第一个元素(从第0个元素算起)的位置插入b的第三个元素到第5个元素(不包括b+6)
a.insert(a.begin()+1, b+3
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

21岁被迫秃头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值