C++ —— 关于vector

目录

链接

1. vector的定义

2. vector的构造

3. vector 的遍历

4. vector 的扩容机制

5. vector 的空间接口

5.1 resize 接口  

 5.2 push_back

5.3 insert 

5.4 erase

5.5 流插入与流提取  

vector 并不支持流插入与流提取,但是可以自己设计,更加灵活方便

6. vector 的不同类型元素 


链接

cplusplus.com/reference/vector/vector/icon-default.png?t=O83Ahttps://cplusplus.com/reference/vector/vector/


1. vector的定义

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

 

2. vector的构造

//模版类只能显式实例化
vector<int> v1;
vector<int> v2(10, 1);//迭代器初始化
vector<int> v3(v2.begin(), v2.end());
vector<int> v4(++v2.begin(), --v2.end());

 


3. vector 的遍历

vector 与 string 的遍历相同,并且做了更多的优化

void test_vector1()
{vector<int> v1;vector<int> v2(10, 1);vector<int> v3(++v2.begin(), --v2.end());//下标遍历for (size_t i = 0; i < v3.size(); i++){cout << v3[i] << " ";}cout << endl;//迭代器遍历vector<int>::iterator it = v3.begin();while (it != v3.end()){cout << *it << " ";++it;}cout << endl;// 范围 for 遍历for (auto e : v3){cout << e << " ";}cout << endl;
}


4. vector 的扩容机制

vector 的扩容机制在 VS 环境下是1.5倍扩容,在 g++ 环境下是2倍扩容,和string相同

但是有一点不同:

那就是string 的 reverse 接口如果给出的值小于原来的容量那么就可能会缩容,但是 vector 的 reverse 接口如果给出一个小于原容量的值就不会缩容

 

void TestVectorExpend()
{size_t sz;vector<int> v;sz = v.capacity();cout << "capacity changed :" << sz << "\n";cout << "make a grow" << endl;for (size_t i = 0; i < 100; i++){v.push_back(i);if (sz != v.capacity()){sz = v.capacity();cout << "capacity changed :" << sz << "\n";}}
}


5. vector 的空间接口

size获取数据个数
capacity获取容量大小
empty判断是否为空
resize改变vector的size
reserve 改变vector的capacity

5.1 resize 接口  

 resize 接口是在原来 vector 对象的基础上进行添加数据

当然有两种情况:

一种是添加数据容量小于原来的size,就会减小size的值而不改变capacity的值(容量不变)

第二种情况就是大于size的值,就会根据给定的值来扩容

vector<int> v(10, 1);
cout << v.size() << endl;
cout << v.capacity() << endl;//小于size
v.resize(5, 2);
cout << v.size() << endl;
cout << v.capacity() << endl;//大于size
v.resize(15, 2);
cout << v.size() << endl;
cout << v.capacity() << endl;

 


void test_vector3()
{//10个整形数据1vector<int> v(10, 1);//申请20空间v.reserve(20);cout << v.size() << endl;cout << v.capacity() << endl;//10个整形数据1,补上5个整形数据2v.resize(15, 2);cout << v.size() << endl;cout << v.capacity() << endl;//10个整形数据1,5个整形数据2,补上10个整形数据3v.resize(25, 3);cout << v.size() << endl;cout << v.capacity() << endl;//只保留5个数据v.resize(5);cout << v.size() << endl;cout << v.capacity() << endl;
}

 


                                                通常 vector 支持迭代器插入


 5.2 push_back

//尾插
vector<int> v(10, 1);
v.push_back(10);
for (auto e : v)
{cout << e << " ";
}
cout << endl;


5.3 insert 

//头插
vector<int> v(10, 1);
v.insert(v.begin(), 1);
for (auto e : v)
{cout << e << " ";
}
cout << endl;//第一个数+3之后在第三个位置进行插入
v.insert(v.begin() + 3, 1);
for (auto e : v)
{cout << e << " ";
}

5.4 erase

删除指定位置的数据

//头删
vector<int> v(10, 1);
v.erase(v.begin());
for (auto e : v)
{cout << e << " ";
}
cout << endl;//第一个数+3之后删除第三个位置的数据
v.erase(v.begin() + 3);
for (auto e : v)
{cout << e << " ";
}
cout << endl;

 


5.5 流插入与流提取  

vector 并不支持流插入与流提取,但是可以自己设计,更加灵活方便

vector<int> v(10);
for (size_t i = 0; i < v.size(); i++)
{cin >> v[i];
}
for (auto e : v)
{cout << e << " ";
}
cout << endl;


6. vector 的不同类型元素 

vector不光可以存储int,double类型,还可以存储日期类,string,自定义类型,甚至还可以存储vector(也就是存储二维数组)

 

vector<vector<int>>:二维数组存放整数类型

 

 

 

//二维数组//5个元素的一维数组vector<int> v(5, 1);//开辟一个10行5列的二维数组vector<vector<int>> vv(10, v);vv[2][1]=1;//这两段代码的意思是相同的//vv.operator[](2)operator[](1)=2;

 遍历

 //二维数组//5个元素的一维数组vector<int> v(5, 1);//开辟一个10行5列的二维数组vector<vector<int>> vv(10, v);//使用下标遍历二维数组for (int i = 0; i < vv.size(); i++){for (int j = 0; j < v.size(); j++){cout << vv[i][j] << " ";}cout << endl;}

 

 


感谢观看~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1539167.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

MSF的使用学习

一、更新MSF apt update # 更新安装包信息&#xff1b;只检查&#xff0c;不更新&#xff08;已安装的软件包是否有可用的更新&#xff0c;给出汇总报告&#xff09; apt upgrade # 更新已安装的软件包&#xff0c;不删除旧包&#xff1b; apt full-upgrade # 升级包&#x…

深度学习-18-深入理解BERT实战使用预训练的DistilBERT模型

文章目录 1 预训练的BERT模型2.1 单词级的嵌入表示2.2 句子级的嵌入表示2.3 从最顶层编码器层中抽取嵌入表示2.3.1 预处理输入2.3.2 获得嵌入表示2.4 从所有的编码器层中抽取嵌入表示2.4.1 预处理输入2.4.2 嵌入表示3 为下游任务微调BERT3.1 文本分类3.1.1 原理(微调BERT模型)3…

MTK芯片机型的“工程固件” 红米note9 5G版资源预览 写入以及改写参数相关步骤解析

小米机型:小米5 小米5x 米6 米6x 米8 米9 米10系列 米11系列 米12系列 mix mix2 mix2s mix3 max max2 max3 note3 8se 9se cc9系列 米play 平板系列等分享 红米机型:红米note4 红米note4x 红米note5 红米note6 红米note7 红米note8 红米note8pro 红米s2 红米note7pro 红米…

大数据概念与价值

文章目录 引言大数据的概念高德纳咨询公司的定义麦肯锡全球研究所的定义什么是大数据&#xff1f; 大数据的特征Volume&#xff08;体积&#xff09;Variety&#xff08;种类&#xff09;Velocity&#xff08;速度&#xff09;Value&#xff08;价值&#xff09;Veracity&#…

OpenCV 1

前言&#xff1a;开新坑辽&#xff0c;&#xff0c; 目录 计算机眼中的图像 视频的读取与处理 ROI区域 边界填充 数值计算 腐蚀操作 膨胀操作 开运算与闭运算 梯度计算 礼貌与黑帽 Sobel算子 梯度计算方法 scharr与laplacian 计算机眼中的图像 灰色图片&#xff0…

微服务——网关路由(Spring Cloud Gateway)

网关路由 1.什么是网关 网关又称网间连接器、协议转换器&#xff0c;是在网络层以上实现网络互连的复杂设备&#xff0c;主要用于两个高层协议不同的网络之间的互连。网关就是网络的关口。数据在网络间传输&#xff0c;从一个网络传输到另一网络时就需要经过网关来做数据的路由…

MYSQL登录失败,确保密码正确,常见问题

今天登录MYSQL时&#xff0c;发现登录不进去,我能确保密码没有错误&#xff0c;并且我昨天以这样的方式登录成功&#xff0c;我已经重启过mysql服务&#xff0c;但是依旧登录不进去。 C:\Users\user>mysql -u root -p Enter password: ****** ERROR 1045 (28000): Access …

(已解决)vscode如何选择python解释器

文章目录 前言解决方案 前言 有的时候可能有不同版本的编译器&#xff0c;以适用不同年份的项目。所以&#xff0c;怎么在vscode中换python解释器呢&#xff1f; 解决方案 对着要运行的python文件进行右键&#xff0c;比如我是要运行main文件&#xff0c;点击那个命令选项版…

为什么7kw交流充电桩主板是充电桩运行的关键

7kw交流充电桩主板是电动汽车充电站中的一个核心组件&#xff0c;负责管理和控制充电过程。它是一种专门为7kw功率设计的交流充电设备的控制中枢&#xff0c;包含了电力电子、微处理器、通信模块等多种元件&#xff0c;以确保安全、高效地为电动汽车提供电能。 7kw与3.5kw主板的…

音视频入门基础:AAC专题(10)——FFmpeg源码中计算AAC裸流每个packet的pts、dts、pts_time、dts_time的实现

音视频入门基础&#xff1a;AAC专题系列文章&#xff1a; 音视频入门基础&#xff1a;AAC专题&#xff08;1&#xff09;——AAC官方文档下载 音视频入门基础&#xff1a;AAC专题&#xff08;2&#xff09;——使用FFmpeg命令生成AAC裸流文件 音视频入门基础&#xff1a;AAC…

【CSS in Depth 2 精译_034】5.4 Grid 网格布局的显示网格与隐式网格(下)

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第一章 层叠、优先级与继承&#xff08;已完结&#xff09; 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位&#xff08;已完结&#xff09; 2.1 相对…

在 React 中模拟输入

需求 与 Bug 项目的 C# 桌面端使用 CefSharp 内嵌了一个三方网站&#xff0c;在外部实现了一个登录控件&#xff0c;外部登录后希望内嵌的三方网站自动登录&#xff0c;实现代码如下&#xff1a; browser.ExecuteScriptAsync($"document.getElementsByName(username)[0]…

Etcd权限认证管理

1 查看是否开启权限认证 ctl auth status 2 开启权限认证 ctl auth enable。开启后每一条命令都要加上用户 --userroot:root(root默认最高权限) 3 创建其他用户 ctl user add user1 --user用户名:密码 4 创建角色 ctl role add testR --user 5 为角色添加权限 ctl role g…

Linux基础命令——文件系统的日常管理

目录 一.如何查看当前工作目录?&#xff08;你现在所处的位置路径&#xff09; 二.命令touch的用途是什么?还有别的方法新建文件吗? &#xff08;1&#xff09;创建空文件 &#xff08;2&#xff09;如果已经存在这个文件&#xff0c;就会更新创建时间。 &#xff08;3…

优化器与现有网络模型的修改

文章目录 一、优化器是什么二、优化器的使用三、分类模型VGG16四、现有网络模型的修改 一、优化器是什么 优化器&#xff08;Optimizer&#xff09;是一个算法&#xff0c;用于在训练过程中调整模型的参数&#xff0c;以便最小化损失函数&#xff08;Loss Function&#xff09…

【论文阅读笔记】YOLOv10: Real-Time End-to-End Object Detection

论文地址&#xff1a;https://arxiv.org/abs/2405.14458 文章目录 论文小结论文简介论文方法为NMS-free训练的一致性双标签分配双标签分配一致性匹配度量 效率-精度整体驱动的模型设计效率驱动模型设计轻量级分类检测头Spatial-channel 解耦下采样Rank-guided block design 精度…

linux 操作系统下的dhclient命令介绍和案例使用

linux 操作系统下的dhclient命令介绍和案例使用 dhclient 是 Linux 系统中用于动态主机配置协议&#xff08;DHCP&#xff09;客户端的命令。它的主要功能是从 DHCP 服务器获取网络配置&#xff0c;包括 IP 地址、子网掩码、默认网关和 DNS 服务器等信息 dhclient 命令概述 …

transformer共享权重对联模型

嵌入维度512&#xff0c;8头,1层 |分割中最从左到右依次是数据集上联,模型预测下联,数据集下联 ,有些对联对的还是可以的 嵌入维度512&#xff0c;8头&#xff0c;3层,最后一个输出层采用线性层,模型训练过程 上面是模型训练过程,下面是模型训练结果 从左到右,上联,模型生成,下…

满足10人同时绘图的图形工作站

在当今这个数字化与创意并重的时代&#xff0c;图形工作站作为设计师、艺术家及数字内容 创作者们的重要工具&#xff0c;其性能与效率直接关系到项目的成功与否。 当谈及满足10人同时绘图的图形工作站时&#xff0c;我们不仅要考虑硬件的峰值性能&#xff0c;还需兼顾软件的兼…