【C++】STL数据结构最全函数详解2-向量vector

关于STL,我们之前浅浅提过:这里

另外对于栈,这里有更加详尽的介绍:C++STL常用数据结构1详解---栈(stack)-CSDN博客

这个系列将会更加深入地从函数原型开始用详细的例子解释用法

首先这一篇介绍的是一个非常方便的、功能更强大的“动态数组”--vector

(有基础的朋友可以直接跳到后面看总结干货)

——————————————————————

作为STL数据结构,vector自然有自己的头文件:

#include<vector>

例:

#include<iostream>
#include<vector>
using namespace std;int n;
vector<int> v;int main()
{cin >> n;for(int i = 0; i < n; i++){int t; cin >> t;//v[i] = t;v.push_back(t);}for(int i = 0; i < n; i++)cout << v[i] << ' ';cout << endl;return 0;
}

在第6行,我们定义了一个存储int的向量v:

定义格式:vector<数据类型> 向量名(初始大小);
//初始大小以及括号可以不加

在14行,我们向这个向量里添加了元素t。push_back即把该元素添加至向量末尾。 

当然,向量与数组类似,支持随机访问。如第13行直接修改值和17行访问都是合法的。

至于更进阶的用法……

#include<iostream>
#include<vector>
using namespace std;int n, m, u, v;
vector< vector<int> > e;int main()
{cin >> n >> m;for(int i = 0; i < m; i++){cin >> u >> v; e[u].push_back(v);e[v].push_back(u);}return 0;
}

我们在这里的第六行定义了向量套向量的e来存储图(邻接表)

在main函数的for循环中,我们依次读入m条边,在u,v两个结点之间连接一条无向边。

优点与特性

这样说下来,有的朋友就要问了:

向量就这?我用数组加计数器也能实现啊!

那向量有什么特别之处吗?

欸!还真有!

细心的小伙伴可能发现了,我们在使用向量时没有设置初始大小。

这是因为,向量采用的是动态分配内存

下面是我们使用push_back和随机访问修改时的场景:

for(int i = 1; i <= 1023; i++){v.push_back(114514);cout << v.capacity() << ' ';//输出vector所占用的实际空间
}

输出:

第1次:没逝,稳得很!1的初始空间刚好能装下!

第2次:啊啊啊~~超出上限了,要长脑子了!

(容量增加到2) 总算能装下了……

第3次:c,怎么天天往里放东西啊?!好烦,干脆一次性再长两个脑子吧……(容量增加到4)

第5次:又放不下了……这次我多开一点空间,不然真的好累……

稍微卑微一点,开个两倍空间足矣!(容量增加到8)

………………

大家也能明显地发现,每当空间不够用时,vector都会申请一倍多余的空间。

所以,大家使用vector时基本可以不用担心数据存不下的问题了!

函数总集(全是干货!!!)

vector<int> v;        <---主角    
v.back()             --- 返回末项的值
v.front()            --- 返回首项的值
v.begin()            --- 返回向量首地址
v.end()              --- 返回向量末尾地址
v.clear()            --- 清空向量(注意这里只是删除元素,空间仍然会被占用!!!)
v.capacity()         --- 返回向量实际占用的空间
v.size()             --- 返回向量中元素的个数
v.empty()            --- 向量是否为空
v.push_back()        --- 向末尾添加元素
v.pop_back()         --- 弹出末尾元素    

总结

总的来说,vector虽然和它的名字(向量)没什么关系

但它可以用倍增的方式拓展存储空间,

相较于传统的数组更加灵活,不必预先设置大小……

那么今天的内容暂时先到这里

(最近在自学unity,有点忙qwq)

最后,如果你喜欢这篇文章,请给作者点个小小的免费的赞叭

球球辣~~

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

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

相关文章

macOS Sequoia发布:Apple又给我们带来了什么惊喜?

今天是个激动人心的日子,尤其是对于Mac用户来说,因为Apple正式发布了全新的操作系统——macOS Sequoia。作为一款专为Mac设备设计的操作系统,Sequoia不仅仅是简单的升级,它承载了Apple在系统体验上的巨大飞跃。听到这个消息,你可能会好奇,Apple这次又会带来什么样的创新?…

ABC371E I Hate Sigma Problems 题解

ABC371E I Hate Sigma Problems 题解 题目描述问题陈述限制因素 样例1解析题解(1) 暴力枚举做法代码运行结果 (2) 暴力优化做法代码运行结果 正解代码运行结果 结语 题目描述 问题陈述 给你一个长度为 N N N 的整数序列 A ( A 1 , A 2 , … , A N ) A (A_1, A_2, \ldots,…

PyCharm 安装教程

传送门 PyCharm 是一款由 JetBrains 开发的强大的 Python 集成开发环境&#xff08;IDE&#xff09;。它支持多种功能&#xff0c;包括调试、代码补全、智能代码分析、版本控制集成等&#xff0c;特别适合开发 Python 项目。接下来&#xff0c;我们将详细介绍如何在不同操作系…

每日一个数据结构-跳表

文章目录 什么是跳表&#xff1f;示意图跳表的基本原理跳表的操作跳表与其他数据结构的比较 跳表构造过程 什么是跳表&#xff1f; 跳表&#xff08;Skip List&#xff09;是一种随机化的数据结构&#xff0c;它通过在有序链表上增加多级索引来实现快速查找、插入和删除操作。…

<<编码>> 第 12 章 二进制加法器--16位加法器 示例电路

16 位加法器内部结构 info::操作说明 鼠标单击逻辑输入切换 0|1 状态 primary::在线交互操作链接 https://cc.xiaogd.net/?startCircuitLinkhttps://book.xiaogd.net/code-hlchs-examples/assets/circuit/code-hlchs-ch12-10-16-bit-adder-internal.txt 16 位加法器示例 info:…

详解JUC

Java并发工具包&#xff08;Java Util Concurrent&#xff0c; 简称JUC&#xff09;是Java提供的一组用于简化多线程编程的类和接口&#xff0c;它包含了用于线程同步、并发数据结构、线程池、锁、原子操作以及其他并发实用工具的丰富集合。 1. 线程池 线程池是 Java 并发编程…

SOMEIP_ETS_112: SD_Empty_Option

测试目的&#xff1a; 验证DUT能够拒绝长度为0的IPv4选项的SubscribeEventgroup消息&#xff0c;并以SubscribeEventgroupNAck作为响应。 描述 本测试用例旨在确保DUT遵循SOME/IP协议&#xff0c;当接收到一个IPv4选项长度为0的SubscribeEventgroup消息时&#xff0c;能够正…

电子竞技信息交流平台|基于java的电子竞技信息交流平台系统小程序(源码+数据库+文档)

电子竞技信息交流平台系统小程序 目录 基于java的电子竞技信息交流平台系统小程序 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设…

如何设置 Django 错误邮件通知 ?

Django 是一个强大的 web 框架&#xff0c;非常适合那些想要完美快速完成任务的人。它有许多内置的工具和特性&#xff0c;一个有用的特性是 Django 可以在出现错误时发送电子邮件提醒。这对开发人员和管理员非常有用&#xff0c;因为如果出现问题&#xff0c;他们会立即得到通…

基于Springboot的物流管理系统设计与实现(附源代码)

物流管理|物流管理系统|基于Springboot的物流管理系统设计与实现 物流管理系统源码&#xff1a;物流管理系统主要是借助计算机&#xff0c;通过对物流管理系统所需的信息管理&#xff0c;物流管理系统的目的 2.2物流管理系统作用 2.3物流管理系统的发展趋势 3物流管理系统分析…

课堂助手|微信课堂助手系统小程序(源码+数据库+文档)

课堂助手|课堂助手系统小程序 目录 微信课堂助手系统小程序 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道师&#xff0c;阿…

react 组件通讯

组件通讯 组件是独立且封闭的单元&#xff0c;默认情况下&#xff0c;只能使用组件自己的数据。在组件化过程中&#xff0c;我们将一个完整的功能拆分成多个组件&#xff0c;以更好的完成整个应用的功能。而在这个过程中&#xff0c;多个组件之间不可避免的要共享某些数据。为…

【蓝牙协议栈】精讲蓝牙PCM和URAT

前言 在蓝牙通信中&#xff0c;PCM和UART是两种不同的数据传输接口&#xff0c;用于连接蓝牙模块和其他设备。它们的作用和特点如下&#xff1a; 1. PCM&#xff08;Pulse Code Modulation&#xff09; PCM&#xff1a;(pulse coded modulation)脉冲编码调制&#xff0c;是将…

Hybrid接口的基础配置

Hybrid模式是交换机端口的一种配置模式&#xff0c;它允许端口同时携带多个VLAN&#xff08;虚拟局域网&#xff09;的流量。Hybrid端口可以指定哪些VLAN的数据帧被打上标签&#xff08;tagged&#xff09;和哪些VLAN的数据帧在发送时去除标签&#xff08;untagged&#xff09;…

MySQL_数据类型简介

课 程 推 荐我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448;入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448;虚 拟 环 境 搭 建 &#xff1a;&#x1…

QT学习与数据库连接

1.基础 1. 安装最后一个非在线版本 5.14, 没有的话联系我 新建一个.cpp文件 #include <QApplication> #include <QLabel> #include <QLineEdit> #include <QPushButton> #include <QHBoxLayout> #include <QVBoxLayout> #include <Q…

道路横幅检测数据集 2000张 街道横幅 带标注 voc yolo

项目背景&#xff1a; 城市中的街道横幅通常用于广告宣传、公共通知等目的&#xff0c;但在某些情况下&#xff0c;它们也可能影响交通安全或市容市貌。因此&#xff0c;对街道横幅进行自动化检测不仅可以帮助城市管理机构及时发现并处理不当悬挂的横幅&#xff0c;还可以辅助…

滑坡落石检测数据集

滑坡落石检测数据集 1500张 滑坡落石 带标注 voc yolo 项目背景&#xff1a; 滑坡落石是地质灾害中的一种常见现象&#xff0c;它对人类生活和基础设施构成了严重威胁。及时准确地检测滑坡落石对于预防灾害发生、减少损失至关重要。传统的检测方法往往依赖于人工巡查&#xff…

【Python】高效图像处理库:pyvips

月亮慢慢变圆&#xff0c;日子慢慢变甜。 在图像处理领域&#xff0c;pyvips 是一个轻量级且高效的库&#xff0c;适合处理大规模图像、实现高性能的操作。相较于其他常见的图像处理库如 PIL 或 OpenCV&#xff0c;pyvips 以其低内存占用和出色的速度脱颖而出。本文将介绍 pyv…

第312题|二重积分求旋转体体积(二)|武忠祥老师每日一题

解题思路&#xff1a;先画出图像&#xff0c;再利用旋转体体积计算公式进行解题。 1. 旋转体体积计算公式&#xff1a; 2.点到直线计算公式&#xff1a; 有了上面两条知识储备之后我们开始计算。 第一步&#xff1a;先计算出点到直线的距离&#xff1a; ymx&#xff0c;y-mx…