C++20学习笔记——vector

std::vector是一种动态数组,提供at(),size(),front(),back()等函数。它可以自动扩展内存,但扩展时会复制旧内容,可能影响效率。可以通过reserve()预分配空间以优化。C++17后支持类型推断。删除元素可用erase()或clear(),empty()检查元素是否为空,pop_back()删除最后一个元素。选择vector或array取决于元素数量是否已知。
摘要由CSDN通过智能技术生成

std::vector<T>

需添加 vector模块

import <vector>;

vector是一个十分强大的序列容器,它不是一个向量,也属于一种数组,但它的长度不受限制,它会在需要更多空间时在内存开辟更大的空间将旧的vector拷贝过去然后删除旧的vector,以下是其声明的一个例子:

std::vector <double> values(20);    
std::vector <double> values_1;  //你甚至可以不设置数组大小,在需要时添加就可
values_1.push_back(20);         //添加一个20的元素,作为第一个元素
values_1.emplace_back(10);      //添加一个10的元素,作为第二个元素
//push_back和emplace_back的效果是一样的,但是前者是在栈区先创建一个元素再拷贝到vector,后者是直接在vector的尾部添加

与a[]和array不同,vector总是会初始化元素为0,当然你可以自己设置初始化数值

std::vector <double> values(20,233);    //values里的所有20个元素被初始化为233

在C++17以后,同 array一样可以不说明类型直接初始化,模板会自动判断数据类型:

std::vector a{ 3.1415926 };  //equal std::vector<double> a{ 3.1415926 };

这里需要提醒以下语法的运用:

std::vector<int> a(20, 6);  //声明一个大小为20的数组并全部初始为6
std::vector<int> b(20);     //声明一个大小为20的数组并默认全部初始为0
std::vector<int> c{ 20 };   //声明一个大小为1的数组且20为唯一元素

vector继承了array的所有优点

1.at() 函数
2.size() 函数,是的vector也总是记录自己的大小
3.front() 和back() 函数可用于快速访问vector的首尾元素
4.可以进行大小比较
5.可以进行同类赋值,大vector赋值给小vector时,小的会被扩大以满足赋值需求,并且小的原元素会被全部覆盖
6.vector也可以被储存在其他容器中
但是vector没有fill() 函数,而是assign() 函数,使用方法:

std::vector<int> a(5);  //声明一个大小为20的数组并全部默认初始为0
a.assign(10, 6);        //将a扩充至10的大小,而后全部初始化为6

删除元素

从C++20开始,可以使用std::erase() 将vector里某个元素出现的所有位置抹去,比如一个vector<> a里有20个元素,那么std::erase(a,n);会将a里的所有n删去,同时将长度缩小至 20-n
当然还有clear() 函数也可以用来删除元素,但是这个函数会将vector里的所有元素删除

std::vector a{1,2,3,4,5,6}; 
std::erase(a, 6);   //a中值为6的数据全部被删除
a.clear();          //a的所有元素都被删除
//这里应注意两者之间语法的区别,erase() 并不是vector的成员函数

vector<> 还提供了empty() 函数,但这并不是清空vector,而是判断vector是否元素为空,返回bool值,并不会修改vector

std::vector<int> a(5,2);  
a.clear();
if (a.empty())
    std::cout << "a is empty" << std::endl;   //输出:a is empty

最后vector<>还提供了pop_back() 函数来删除vector里的最后一个元素

关于使用vector时可做的优化

vector在使用时当出现了容器大小变化时,它总是将旧的容器复制到新的更大或者更小的容器中,然后删除旧的容器,这样做会不可避免地降低程序运行效率
首先介绍一下reserve() 成员函数,它的作用是为vector预留三个元素大小的空间,但要注意的是,它与声明时初始空间大小本质上是不同的

最后的最后,在学习完array和vector后,当知道元素的准确数量时使用array,否则使用vector,从而逐渐摒弃原始数组的使用

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值