【C++修炼秘籍】Vector深度剖析

【C++修炼秘籍】STL-Vector

☀️心有所向,日复一日,必有精进

☀️专栏《C++修炼秘籍》

☀️作者:沂沐沐

☀️如果有错误,烦请指正,如有疑问可私信联系;


目录


前言

vector的数据安排以及操作方式,与array非常相似,就像数组一样,vector采用连续的存储空间,可以像数组一样的随机访问,但是又不像数组一样,它的大小是可以随意改变的,而且是自动处理;有了vector后,相比于C语言的数组使用要方便许多,接下来让我们深入了解一下;


一、vector介绍

vector动态开辟空间,是可变大变小的数组序列容器;

像数组一样随机访问;

vector的动态分配策略:

分配一个新的数组,然后将全部元素移到这个数组。就时间而言,这是一个相对代价高的任务,因为每当一个新的元素加入到容器的时候,vector并不会每次都重新分配大小
所以vector在对空间进行管理的时候扩容一般是异地扩容,代价比较高,尽量避免扩容减少扩容,缩容是几乎不可能缩容的;但是有缩容函数

shrink_to_fit()缩容函数(不建议使用、代价很大,异地缩容;)

例如:

reserve不会缩容,缩容是有代价的,以空间换时间;

resize()不会缩容,只是改size;

vector<char>和string 是有一定区别:没有“\0",接口不一样;

二、vector的使用/接口介绍

vector的构造

(constructor)构造函数声明 接口说明
vector()(重点) 无参构造
vector(size_type n, const value_type& val = value_type()) 构造并初始化n个val
vector (const vector& x); (重点) 拷贝构造
vector (InputIterator first, InputIterator last); 使用迭代器进行初始化构造

vector迭代器

iterator的使用 接口说明
begin +
end(重点)
获取第一个数据位置的iterator/const_iterator, 获取最后一个数据的下一个位置
的iterator/const_iterator
rbegin + rend 获取最后一个数据位置的reverse_iterator,获取第一个数据前一个位置的
reverse_iterator

迭代器我们可以知道他可以遍历STL的容器,vector也可以使用[]像数组那样访问,但是List地址不连续怎么像数组那样访问;

 下面是vector的三种访问方式:

vector<int> vv = {2,3,5,7,1,5,0};
	vector<int>::iterator it = vv.begin();
	cout << "迭代器方式" << endl;
	while (it != vv.end())//迭代器方式
	{
		cout << *it << " ";
		it++;
	}
	cout << endl;
	cout << "[]访问方式" << endl;

	for (int i = 0; i < vv.size(); i++)//[]访问方式
	{
		cout << vv[i] << " ";
	}
	cout << endl;
	cout << "范围for方式" << endl;
	for (auto e : vv)//范围for方式
	{
		cout << e << " ";
	}

范围for其实底层就是对迭代器的简单替代; 

vector 空间管理

容量空间 接口说明
size 获取数据个数
capacity 获取容量大小
empty 判断是否为空
resize(重点) 改变vector的size
reserve (重点) 改变vector的capacity
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值