【C++初阶】探索STL之——vector

news2024/11/14 0:42:15

【C++初阶】探索STL之——vector

  • 1.什么是vector
  • 2.vector的使用
    • 2.1 vector的定义
    • 2.2 vector iterator(迭代器)的使用
    • 2.3 vector空间问题
    • 2.4 vector的增删查改
    • 2.5 vector迭代器失效的问题
      • 2.5.1 vector常见迭代器失效的操作
  • 3 动态二位数组

1.什么是vector

vector其实就是一个可以储存数组的容器,其次它的大小是可以改变的,想要了解更多详细信息可以查看vector文档,(vector文档介绍)

2.vector的使用

2.1 vector的定义

在这里插入图片描述
代码实现:

vector<int> s1;//无参构造

vector<int> s2(5, 0);//开辟5个空间,用0去初始化

vector<int> s3(s2);//拷贝构造,将s2拷贝给s3

vector<int> s4(6,1);

vector<int> s5(s4.begin(), s4.end());//使用迭代器初始化

运行结果
在这里插入图片描述

由于s1没有参数,所以打印出来是空白的

2.2 vector iterator(迭代器)的使用

在这里插入图片描述

一般迭代器在使用范围for或者在定义时对其他对象初始化时使用,你只要记住它是一个指针,不同的迭代器指向的位置不同就行了,代码演示如下:

vector<int> s1;
s1.push_back(1);
s1.push_back(2);
s1.push_back(3);
s1.push_back(4);
s1.push_back(5);


cout <<*( s1.begin()) << endl;
cout << *(s1.end()-1) << endl;
cout << *(s1.rbegin()) << endl;
cout << *(s1.rend()-1) << endl;

运行结果
在这里插入图片描述

2.3 vector空间问题

在这里插入图片描述
在这里插入图片描述

这里的前面3个接口很好理解,其中后面理解起来稍微有点吃力。简单的来说:resize如果你给的n值比原来vector的数据个数小,那么这个vector会缩小它的size为n,反之它会对你的vector进行扩容,其余的部分用val值来填充,然后size的值也会变为n。
      reserve就是改变vector 的容量,如果你reserve给的值比原来vector的容量(capacity)还小,他也不会影响你原来的数据,也可以理解为编译器不会运行你的这段代码,它也不会报错。

2.4 vector的增删查改

在这里插入图片描述

vector <int> s1;
s1.push_back(1);//尾插1
s1.push_back(2);//尾插2
s1.push_back(3);//尾插3

for (int i = 0; i < s1.size(); i++)
{
	cout << s1[i];
}
cout << endl;

s1.pop_back();//尾删

for (int i = 0; i < s1.size(); i++)
{
	cout << s1[i];
}
cout << endl;

auto pos = find(s1.begin(),s1.end(), 2);//find返回的是要查询数据位置的迭代器

cout <<*(pos) << endl;

s1.insert(s1.begin(), 8);//在指定位置插入

for (int i = 0; i < s1.size(); i++)
{
	cout << s1[i];
}
cout << endl;

s1.erase(s1.begin());//删除指定位置的数据

for (int i = 0; i < s1.size(); i++)
{
	cout << s1[i];
}
cout << endl;

vector<int>s2(4, 0);
s1.swap(s2);//交换两个vector的数据

for (int i = 0; i < s1.size(); i++)
{
	cout << s1[i];
}
cout << endl;

cout << s1[2] << endl;//vector也支持下标+[]访问

运行结果
在这里插入图片描述

其实这些接口还有很多的用法,这里只是展示了部分使用频率比较多的用法和结果,所以要多多的去查看文档(vector文档),
加深自己的印象。

2.5 vector迭代器失效的问题

迭代器的主要作用就是让算法能够不用关心底层数据结构,其底层实际就是一个指针,或者是对指针进行了封装,比如:vector的迭代器就是原生态指针T* 。因此迭代器失效,实际就是迭代器底层对应指针所指向的空间被销毁了,而使用一块已经被释放的空间,造成的后果是程序崩溃(即如果继续使用已经失效的迭代器,程序可能会崩溃)。

2.5.1 vector常见迭代器失效的操作

1.resize 、reserve、push_back、insert等可能会扩容的操作都会导致迭代器失效。
因为扩容的操作会销毁旧空间,这也导致之前迭代器指向的空间被销毁了,如果后面还要使用就会报错,这也就说明该迭代器已经失效了,除非后面你对迭代器进行了更新,让他指向新的空间,这样就不会失效了。

2.指定位置删除-erase
假设你使用pos去记录vector中的一个数据,如果你使用erase去删除它,如果这个数后面还有其他 数据,那这个迭代器不会失效,因为你删除该位置的数据后,后面的数据会往前移,因此就不会失效了。
但是如果这个pos记录的是vector最后一个数据话,删除这个数据后,这个迭代器就会失效,因为数据往前移后,pos指向的位置没有值了。
所以想要解决迭代器失效的办法:在使用前,对迭代器重新赋值即可。

3 动态二位数组

vector<int> s1(4,0);

vector<vector<int>> s2(4, s1);

构造一个s2动态二维数组,s2中总共有4个元素,每个元素
都是vector类型的s1,这也巧妙的构成了一个4行4列的二位数组;

创作不易,还请三连,有不对的地方还请大佬们指点一二!

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

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

相关文章

iPhone16,超先进摄像头系统?丝滑的相机控制

iPhone 16将于9月20号正式开售&#xff0c;这篇文章我们来看下iPhone 16 在影像方面&#xff0c;有哪些升级和新feature。 芯片&#xff1a;采用第二代 3纳米芯片&#xff0c;A18。 摄像头配置&#xff1a; iPhone 16 前置&#xff1a;索尼 IMX714 &#xff0c;1200 万像素&am…

SQL 多表联查

目录 1. 内联接&#xff08;INNER JOIN&#xff09; 2. 左外联接&#xff08;LEFT JOIN&#xff09; 3. 右外联接&#xff08;RIGHT JOIN&#xff09; 4. 全外联接&#xff08;FULL JOIN&#xff09; 5. 交叉联接&#xff08;CROSS JOIN&#xff09; 6. 自联接&#xff0…

简单题101. 对称二叉树 (python)20240922

问题描述&#xff1a; python: # Definition for a binary tree node. # class TreeNode(object): # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right rightclass Solution(object):def isSymm…

网络通信——OSI七层模型和TCP/IP模型

OSI模型 一.OSI七层模型 OSI&#xff08;Open System Interconnect&#xff09;七层模型是一种将计算机网络通信协议划分为七个不同层次的标准化框架。每一层都负责不同的功能&#xff0c;从物理连接到应用程序的处理。这种模型有助于不同的系统之间进行通信时&#xff0c;更…

pycharm连接远程linux服务器上的docker进行深度学习训练

实习过程中由于GPU都在服务器上&#xff0c;编辑代码很麻烦。并且服务器上配置了docker的环境&#xff0c;所以用pycharm连接远程服务器的docker进行深度学习&#xff0c;这样在本地调用远程服务器的GPU和环境&#xff0c;更方便一点&#xff0c;将这个过程记录下来&#xff0c…

如何将MySQL卸载干净(win11)

相信点进来的你肯定是遇到了这个问题&#xff0c;那就是在安装MySQL的时候操作错误&#xff0c;最后结果不是自己想要的。卸载重新安装又发现安装不了。其实最主要的原因就是没有将MySQL卸载干净&#xff0c;那么如何把MySQL卸载干净&#xff1f;下面本篇文章就来给大家一步步介…

【C++】二叉搜索树的底层以及实现

个人主页 文章目录 ⭐一、二叉搜索树的概念&#x1f680;二、二叉搜索树性能分析&#x1f3dd;️三、二叉搜索树的操作1. 插入2. 查找3. 删除4. 遍历节点 &#x1f384;四、二叉搜索树的实现&#xff08;K模型&#xff09;&#x1f389;五、二叉搜索树的应用1. K模型2. KV模型…

14. PEFT:在大模型中快速应用 LoRA

如果你对LoRA还没有一个直观的概念&#xff0c;可以回看这篇文章&#xff1a;《3. 认识 LoRA&#xff1a;从线性层到注意力机制》。 我们将在这里进一步探讨如何快速地在大型预训练模型中应用 LoRA&#xff0c;并解答可能存在的问题&#xff0c;包括&#xff1a; peft 和 lora …

NSSCTF刷题篇1

js类型 [SWPUCTF 2022 新生赛]js_sign 这是一道js信息泄露的题目直接查看源码&#xff0c;有一个main.js文件点击之后&#xff0c;有一串数字和一段base64编码&#xff0c;解开base64编码得到这个编码为敲击码 解码在线网站&#xff1a;Tap Code - 许愿星 (wishingstarmoye.…

828华为云征文|华为云Flexus云服务器X实例之openEuler系统下部署k8s管理面板KubePi

828华为云征文&#xff5c;华为云Flexus云服务器X实例之openEuler系统下部署k8s管理面板kubepi 前言一、Flexus云服务器X实例介绍1.1 Flexus云服务器X实例简介1.2 Flexus云服务器X实例特点1.3 Flexus云服务器X实例使用场景 二、 KubePi介绍2.1 KubePi简介2.2 KubePi主要特点&am…

序列化方式二——JSON之Gson

Gson 1、什么是Gson? Gson是Google提供的一个用于Java编程语言的JSON&#xff08;JavaScript Object Notation&#xff09;序列化和反序列化库。它允许开发者在Java对象和JSON数据之间进行高效的映射和转换。 官网地址&#xff1a;https://github.com/google/gson 官网文档…

小程序隐私合规自查指南

一 背景&#xff1a;小程序作为一种轻量级应用&#xff0c;广泛应用于各大互联网平台。工信部通报2022年第5批侵害用户权益名单中首次出现8款违规小程序。各监管单位对“小程序”违规收集个人信息监控手段和监控力度不断加强。 工信部APP违法违规通报 上海市委网信办查处违规小…

Python_控制循环语句

if语句单分支结构的语法形式如下&#xff1a; 【操作】输入一个数字&#xff0c;小于10&#xff0c;则打印这个数字(if_test01.py)&#xff1a; num input("输入一个数字&#xff1a;") if int(num)<10: print("小于10的数&#xff1a;"num)条件表达式…

BOE(京东方)携多场景物联网创新应用亮相2024服贸会 “屏之物联”赋能数字经济

9 月 12 日&#xff0c;以“全球服务 互惠共享”为主题的2024中国国际服务贸易交易会&#xff08;以下简称“服贸会”&#xff09;在北京拉开帷幕。作为领先的物联网创新企业&#xff0c;BOE&#xff08;京东方&#xff09;携智慧办公、智慧商显、智能车载、智慧教育、智能工厂…

设计模式例题

答案&#xff1a;D C A D 知识点&#xff1a; 观察者模式的意图&#xff1a;定义对象间的一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖它的对象都得到通知并被自动更新&#xff0c;和自媒体很相似&#xff0c;自媒体更新内容&#xff0c…

C++--C++11(下)

目录 7.5 完美转发 8 新的类功能 9 可变参数模板 10 lambda表达式 11 包装器 7.5 完美转发 模板中的 && 万能引用 void Fun(int &x){ cout << "左值引用" << endl; } void Fun(const int &x){ cout << "const 左值引用…

秒变 Vim 高手:必学的编辑技巧与隐藏功能大揭秘

文章目录 前言一、vi与vim二、Vim的三种模式1. 普通模式2. 插入模式3. 命令模式 三、Vim中的查找与替换1. 查找2. 替换 四、给Vim设置行号1. 临时显示行号2. 永久显示行号 总结 前言 在Linux系统中&#xff0c;文本编辑器是开发者和系统管理员日常工作中的重要工具之一。其中&…

DeepSeek 2.5本地部署的实战教程

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于大模型算法的研究与应用。曾担任百度千帆大模型比赛、BPAA算法大赛评委,编写微软OpenAI考试认证指导手册。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。授权多项发明专利。对机器学…

想学习下Python和深度学习,Python需要学习到什么程度呢?

想要学习Python和深度学习&#xff0c;Python的学习程度需要达到能够熟练运用这门语言进行编程&#xff0c;并能够理解和实现深度学习模型的基本构建和训练过程。以下是一些推荐的书籍&#xff0c;可以帮助你系统地学习Python和深度学习&#xff1a; Python学习推荐书籍 《Py…

kubectl 执行一条命令之后发生了什么?

kubectl 是与 Kubernetes 集群交互的命令行工具&#xff0c;用户通过它可以对集群资源进行操作和管理。你有没有想过&#xff0c;当我们执行一条 kubectl 命令之后&#xff0c;背后都发生了什么&#xff1f; 详细过程 kubectl -> kube-api-server 根据通信类型&#xff0…