STL vector

头文件: < vector >

vector< T >容器是包含 T 类型元素的可自动增长容量的序列容器。也可理解为容量可变的数组。

vector 只能在尾部高效的增删元素。

vector的容量大小:
是指在不分配更多内存的情况下,可以保存的最多元素个数。
在创建vector同时不分配元素时,容量大小为0

vector的大小:
是指容器实际包含的元素个数。

这里是引用

vector创建:

std::vector<int> a;  // 创建整型容器 a , <>中为容器类型
std::vector<double> b;  //创建浮点型容器 b
std::vector<char> c;  //创建字符型容器 c

分配内存比较浪费时间,所以在定义容器时就指定容量。

一、

std::vector<int> values(20);  //定义 a 容量为 20, 初始默认值都为 0, 在元素个数超过 20 时,vector使用算法自动增加容量

注意:( ) 和 { } 的区别

std::vector<int> values{20};  //容量为 1,且元素值为20
//相当于初始化数组 

二、

创建 vector 时,如果不想初始值为 0, 则可以用下面这条语句

std::vector<int> numbers(20, 1);  

//第一个参数指定 vector 中的元素个数
//第二个参数指定所有元素的初始值,可改变; 可以是表达式计算结果,也可以是从键盘输入的数

三、

容器的大小

std::a.size();  //返回容器中元素个数

vector元素的获取:

a.begin();  //返回当前 vector 起始元素的迭代器
a.end();  //返回当前 vector 末尾元素迭代器

一、

vector 像数组一样,索引从 0 开始,通过索引获取元素。
vector 和数组一样,并不判断索引是否越界。

二、

std::cout << a.front() << std::endl;  //返回容器第一个元素的值

std::cout << a.back() << std::endl;  //返回容器最后一个值

因为 front() 和 back() 返回的是引用,所以可以赋值

a.front() = 20;

vector元素的增删:

一、增

a.push_back(888);  //在容器末尾添加元素 888
a.emplace(888);  //在容器末尾添加元素 888

emplace() 比 push_back()更有效率。

插入:

a.insert(a.begin(), 888);  //在开头插入 888
a.insert(a.begin()+2, 888);  //在原序列第 2 位置之前插入 888

二、删

a.pop_back();  //删除容器最后一个元素
a.clear();  //删除容器所有的元素
a.erase( a.begin()+2 );  //删除原序列第 2 位置处元素

示例:

#include<iostream>
#include<vector>

using namespace std;

void print(vector<int> a){  //输出 
	for(int i=0; i<a.size(); i++){
		cout << a[i] <<' ';
	}
}

int main(){
	vector<int> a;
	vector<int> values(10); 
	
	a.push_back(0);  //增加元素 
	a.push_back(1);
	a.push_back(2);
	a.push_back(3);
	a.push_back(4);

	print(a);  // 0 1 2 3 4 
	cout << endl;
	
	a.pop_back();  //删除元素 
	a.pop_back();
	
	print(a);  // 0 1 2
	cout << endl;
	
	a.insert(a.begin(), 8);  //在最开始和最后插入 8
	a.insert(a.end(), 8);  
	
	print(a);  // 8 0 1 2 8 
	cout << endl;
	
	a.insert(a.begin()+4, 3);   //在原序列第 4 位置之前插入 3 
	
	print(a);  // 8 0 1 2 3 8 
	cout << endl;
	
	a.erase(a.begin()+4);  //删除原序列第 4 位置元素 
	
	print(a);  // 8 0 1 2 8 
	cout << endl;
	
	a.front() = 999;   //将原序列最前面元素重新赋值 
	
	print(a);  // 999 0 1 2 8 
	cout << endl;
	
	a.clear();  //删除所有元素 
	
	print(a);  // 空 
	 
	return 0;
} 

结果:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Guan_qiqi

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

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

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

打赏作者

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

抵扣说明:

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

余额充值