C++的vector容器


C++语言定义了扩展的“抽象数据类型”(Abstract Data Type, ADT),放在“标准库”中。对数组功能进行扩展的一个标准库类型,就是“容器”vector。顾名思义,vector“容纳”着一堆数据对象,其实就是一组类型相同的数据对象的集合。

头文件和命名空间

vector是标准库的一部分。要想使用vector,必须在程序中包含头文件,并使用std命名空间。

#include<vector>
using namespace std;

在vector头文件中,对vector这种类型做了定义;使用#include引入它之后,并指定命名空间std之后,我们就可以在代码中直接使用vector了。

vector的基本用法

vector其实是C++中的一个“类模板”,是用来创建类的“模子”。在使用时要提供数据类型。具体的形式是在vector后面跟一个尖括号<>,里面填入具体类型信息。

vector<int> v;
//定义一个int类型的容器

初始化

跟数组相比,vector的初始化更加灵活方便,可以应对各种不同的需求。
这里有几种不同的初始化方式:

  1. 默认初始化一个vector对象,就是一个空容器,里面不含任何元素;
  2. C++ 11之后可以用花括号括起来的列表,对vector做初始化;等号可以省略;这种方式是把一个列表拷贝给了vector,称为“拷贝初始化”
  3. 可以用小括号表示初始化vector的长度,并且可以给所有元素指定相同的初始值;这种方式叫做“直接初始化”
vector<int> v1;
//定义了一个名字叫v1的int类型vector,跟数组不同,这个容器做了默认的初始化
vector<char> v2 = {'a','b','c'};
//做了一个名字叫v2的vector容器,但是为char类型,直接给了初始值
vector<char> v3{ 'h','y','o' };
//做了一个名字叫v3的vector容器,为char类型,不用等号直接给了初始值
vector<short> v4(5);
//做了一个名字叫v4的vector容器,为short类型,五个元素直接给了初始值0
vector<long> v5(4, 10);
//做了一个名字叫v5的vector容器,为long类型,4个元素直接给了初始值10

访问元素

vector是包含了数据对象的“容器”,在这个容器集合中,每个数据对象都会有一个编号,用来做方便快速的访问;这个编号就是“索引”(index)。同样可以用下标操作符来获取对应索引的元素,这一点跟数组非常相似。
需要注意:

  1. vector内元素的索引,也是从0开始;
  2. vector索引最大值为 (vector长度 - 1),不能越界访问;如果直接越界访问并赋值,有可能导致非常严重的后果,出现安全问题
//访问元素
cout << v5[3] << endl;
//同样的,只能访问v5[0]-v5[3],不能够越界,不然会报错

遍历所有元素

vector中有一个可以调用的函数size(),只要调用它就能直接得到vector的长度(即元素个数):

//查询长度
cout << "v5的长度为:" << v5.size() << endl;
//可以直接使用vector.size()这个函数查询容器长度

调用的方式是一个vector对象后面跟上一个点,再跟上size()。这种基于对象来调用的函数叫做“成员函数”。
这样我们就可以非常方便地用for循环遍历元素了:

添加元素

vector的长度并不是固定的,所以可以向一个定义好的vector添加元素。这里的push_back同样是一个成员函数,调用它的时候在小括号里传入想要添加的数值,就可以让vector对象中增加一个元素了。这就使得我们在创建vector对象时不需要知道元素个数,使用更加灵活,避免了数组中的缺陷。

//添加内容
v5.push_back(20);
//使用v5.push_back这个函数
cout << "v5的长度为:" << v5.size() << endl;
//发现此时v5的长度增加了
for (int i = 0; i < v5.size(); i++) 
{
	cout << v5[i] << "\n" << endl;
}
//我们发现,对于vector的使用,不用去管它的长度,它自行会赋予相应的长度

vector和数组的区别

  1. 数组是更加底层的数据类型;长度固定,功能较少,安全性没有保证;但性能更好,运行更高效;
  2. vector是模板类,是数组的上层抽象;长度不定,功能强大;缺点是运行效率较低;
  3. C++11还新增了一个array模板类,它跟数组更加类似,长度是固定的,但更加方便、更加安全。所以在实际应用中,一般推荐对于固定长度的数组使用array,不固定长度的数组使用vector。

全部代码

#include<iostream>
#include<vector>
using namespace std;

int main() 
{
	vector<int> v1;
	//定义了一个名字叫v1的int类型vector,跟数组不同,这个容器做了默认的初始化
	vector<char> v2 = {'a','b','c'};
	//做了一个名字叫v2的vector容器,但是为char类型,直接给了初始值
	vector<char> v3{ 'h','y','o' };
	//做了一个名字叫v3的vector容器,为char类型,不用等号直接给了初始值
	vector<short> v4(5);
	//做了一个名字叫v4的vector容器,为short类型,五个元素直接给了初始值0
	vector<long> v5(4, 10);
	//做了一个名字叫v5的vector容器,为long类型,4个元素直接给了初始值10

	
	//访问元素
	cout << v5[3] << endl;
	//同样的,只能访问v5[0]-v5[3],不能够越界,不然会报错


	//查询长度
	cout << "v5的长度为:" << v5.size() << endl;
	//可以直接使用vector.size()这个函数查询容器长度


	//添加内容
	v5.push_back(20);
	//使用v5.push_back这个函数
	cout << "v5的长度为:" << v5.size() << endl;
	//发现此时v5的长度增加了
	for (int i = 0; i < v5.size(); i++) 
	{
		cout << v5[i] << "\n" << endl;
	}
	//我们发现,对于vector的使用,不用去管它的长度,它自行会赋予相应的长度
	cin.get();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值