C++ 之 Vector数组基础用法介绍

目录

前言

一、Vector数组简介

1、引入

2、Vector数组概念

二、Vector数组用法

1、数组的初始化

1.构造函数

2.常用初始化方式代码示例

3.通过insert初始化

2、Vector的用法

3、Vector的算法


前言

如果你有什么问题,希望跟我能够一起交流,除了通过博客交流外,欢迎你加入我的QQ群,一起交流有关于机器学习、深度学习、计算机视觉有关内容。目前我并未确定具体的研究方向,所以现在 处于广泛涉猎阶段,希望我们能够一起沟通。下图是我的群二维码:

 

一、Vector数组简介

1、引入

在写C++代码的时候,经常会遇到Vector数组,特别是在学习OpenCV的时候,经常会碰到Vector数组。

2、Vector数组概念

在c++中,vector是一个十分有用的容器。那么,他是一个什么样的容器呢?

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

对于C++来说,vector在C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库

二、Vector数组用法

1、数组的初始化

1.构造函数

Vector数组初始化调用了构造函数,Vector数组构造函数主要有以下几个:

        vector()                       // 创建一个空vector
        vector(int nSize)              // 创建一个vector, 元素个数为nSize
        vector(int nSize, const t& t)  // 创建一个vector,元素个数为nSize, 且值均为t
        vector(const vector&)          // 复制构造函数
        vector(begin, end)             // 复制[begin, end)区间内另一个数组的元素到vector中

2.常用初始化方式代码示例

1.不带参数的构造函数初始化

这种方式是默认初始化,vector为空, size为0,表明容器中没有元素,而且 capacity 也返回 0,意味着还没有分配内存空间。适用于元素个数未知,需要在程序中动态添加的情况

        #include<vector>

        vector<int> vec1; //初始化一个size为0的vector

2.带参数的构造函数初始化

(1)默认值初始化

Vec2中将包含5个元素,每个元素进行缺省的值初始化,对于int,也就是被赋值为0,因此Vec2被初始化为包含5个0。当程序运行初期元素大致数量可预知,而元素的值需要动态获取的时候,可采用这种初始化方式

	//初始化size,但每个元素值为默认值
	vector<int> Vec2(5);      //初始化了5个默认值为0的元素

(2)指定值初始化

Vec3被初始化为包含5个值为1的int。当程序运行初期元素大致数量可预知,而元素的值几乎相同时,可采用这种初始化方式

	//初始化size,并且设置初始值
	vector<int> vec3(5,1);    //初始化了5个值为1的元素

(3)复制构造函数初始化

复制构造函数有两种方式,这两种方式等价 ,后者初始化为前者的拷贝,两者类型必须相同,也就是同为int的vector类型,初始化后,两者具有相同的容量和元素,适用于两个数组类型相同时的重命名或数据传递等情况

	vector<int> vec4 = vec2;
	vector<int> vec5(vec2)

(4)直接赋值初始化

初始化为列表中元素的拷贝,列表中元素必须与Vec6的元素类型相容,本例中必须是与整数类型相容的类型,整形会直接拷贝,其他类型会进行类型转换。

	vector<int> Vec6 = { 1,2,3,0,4,5,6,7 };
	vector<int> Vec7{ 1,2,3,0,4,5,6,7 };

3.通过insert初始化

用insert初始化Vector数组的方法有很多,废话不多说,用代码说话。

        //insert初始化方式将同类型的迭代器对应的始末区间(左闭右开区间)内的值插入到vector中
	vector<int> vec8;
	//将vec2[0]~vec2[2]插入到vec8中,vec8.size()由0变为3
	vec8.insert(vec8.begin(), vec2.begin(), vec2.begin() + 3);
	//insert可以插入m个值为n的元素
	//在vec8开始位置处插入6个6
	vec8.insert(vec8.begin(), 6, 6);

	//insert也可通过数组地址区间实现插入
	int a[6] = { 6,6,6,6,6,6 };
	vector<int> vec9;
	//将a的所有元素插入到b中
	vec9.insert(vec9.begin(), a, a + 7); 

2、Vector的用法

相关用法,请看代码

        //1.尾部插入及删除数字
	vec2.push_back(1);  //尾部插入元素
        vec2.pop_back()     //删除尾部元素

	//2.使用下标访问元素,
	cout << vec2[0] << endl; //记住下标是从0开始的。

	//3.使用迭代器访问元素.
	vector<int>::iterator it;
	for (it = vec2.begin(); it != vec2.end(); it++)
		cout << *it << endl;

	//4.插入元素:    
	vec2.insert(vec2.begin() + i, a); //在第i + 1个元素前面插入a;

	
	//5.删除元素:    
	vec2.erase(vec2.begin() + 2); //删除第3个元素

	vec2.erase(vec2.begin() + i, vec2.end() + j); //删除区间[i, j - 1]; 区间从0开始

	//6.求数组大小:
	vec2.size();

	//7.清空 : 
	vec2.clear();

3、Vector的算法

主要有两个算法,一个是逆序,一个是排序,其他算法我们都可以自己编写,把这两个算法分享给大家:

注意,sort函数要添加头文件:

        #include<algorithm>

算法如下:

        //1.将元素逆序
	reverse(vec2.begin(), vec2.end()); //将元素翻转,即逆序排列!

	//2.将元素排序
	sort(vec2.begin(), vec2.end()); //(默认是按升序排列, 即从小到大).
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值