vector

一. 概念与底层

1.概念

vector是向量的意思。vector代表的是一个容器

使用vector的时候记得包含头文件:#include<vector>
记得加命名空间std::(因为vector在标准库里)

在这里插入图片描述
由tmplate可知,vector是一个模板。

vectors是序列容器,代表可以更改大小的数组

2.底层

我们可以先简单了解一下vector的底层。(与后面专门讲的稍有差异)

template<class T>
class vector
{
   
public:

private:
	T* _arr;  //这个是数组的指针,这是模板,数组的元素暂未确定
	size_t _size; 
	size_t _capacity;
};

vector是一个模板,没有确定数组元素的类型

二. 构造与析构

在这里插入图片描述

size_type:用以保存任意string对象或vector对象的长度
value_type:stl容器盛装的数据的数据类型

#include<stdio.h>
#include<vector>
int main()
{
   
	//无参构造
	std::vector<int> v1;
	//用10个1构造
	std::vector<int> v2(10, 1);
	return 0;
}

理解 std::vector<int> v1{ 1,2,3,4 };

linitializer_list

在此之前,先了解一下linitializer_list,它也是一个容器
在这里插入图片描述

  1. 支持{}案例初始化这个容器
  2. 支持基本的迭代器(支持遍历)
  3. 不支持插删修(因为const T*)

在这里插入图片描述

the type of il is an initializer_list
il的类型是initializer_list

auto il = { 10, 20, 30 };的底层:开一个数组,将值拷贝进去。
对象il里面有2个指针指向数组空间,一个指向数组的开始,一个指向数组的结束
在这里插入图片描述

vector<int> v1={1,2,3,4};

这个属于是隐式类型转换
{1,2,3,4}去构造一个vector的临时对象,再去拷贝构造。优化之后:直接构造

vector<int> v1({1,2,3,4});

auto il = { 10, 20, 30 };或者显性地写:initializer_list il = { 10,20,30};

析构:

vector的析构是:释放底层动态开辟的数组资源
它的底层是有一个指针T* _arr;,这个指针指向数组空间,在堆上,除了作用域就要就需要释放,所以调析构

三. 各种接口

遍历方式

在说接口之前,我们再回想一下,遍历容器的元素都有哪些方法呢?

3种:

  1. 普通循环遍历
  2. 迭代器(有通用性,任何容器的迭代器都是在他的类域里面)
  3. 范围for(支持迭代器,则支持fanweifor)

1.普通的循环遍历

#include<stdio
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值