C++----简单了解vector

       大家好,今天我们来讲讲与string相似的向量类型。之所以说他们是相似的原因是他们其中的数据类型有些效果都是一样的。当然大家不能说,既然是差不多的干嘛还有一个这个啊。不如直接用string就可以了。当然世界名言存在即合理。既然我们都能想到的东西,那些创始人大佬肯定也能想到这些。我自己认为的话:vector 是一个类模板,编译器根据模板创建类或函vector<string> 就是根据模板创建了若干 string 对象,而 string 本身可以包含字符串,字符串可以视为若干个字符,即,vector<string> 可以视为一个a [ ][ ] 数组。可以使用输出数组的方式来输出vector<string> 对象内的内容。但这些都不是我们这篇博客的主题。我们今天主要是想与大家分享一下,如何使用,好的吧。所以咧接下来我们来看看vector的一些用法。

vector的定义

        在我们上面的博客中我们先写string的定义构造的,那么我们这里也先写vector的定义够造。但大家都知道定义构造我们都是有模板的,编译器会根据我们的参数不同来构造不同的数据存储空间。那么我们先看看vector中的几个关键的定义模板:         大家看到上面的这个图片是不是觉得好熟悉啊,和string的有点像呀。这就是我们在序言中讲过的。string与vector是有点相似的。那么我们接下来看看这些都是怎么写的吧。

vector<int> first;                                // empty vector of intsvector<int> second(4, 100);                       // four ints with value 100vector<int> third(second.begin(), second.end());  // iterating through secondvector<int> fourth(third);                       // a copy of third

        这里大家不用太纠结,大概知道如何使用和作用就行了。如果大家对我这里的理解不是太熟悉的话我会在博客末尾的地方将我们的vector的官网链接给大家。大家可以在用的时候,点那个链接找就可以了。

vector iterator 的使用

        大家可能看到这个小标题有点陌生但其实我们在string的时候就已经见过,并且使用过了,就是我们前面说过的迭代器。那么不知道大家对这个名词还有印象吗?如果在通透一点就是,我们前面将的begin和end。这个就叫迭代器。大家记住了,别忘了。后面要是有人说这个名词的话,大家不要二丈和尚摸不着头脑哈。大家也先先看看图片:

          我们还知道吧。我们普通的begin和end就是我们正常头尾。然后加个r就是相反的

         OK,当我们知道了vector的迭代器的作用,那么我们接下里就是我们写过代码的实现实例了。

void PrintVector(const vector<int>& v)
{// const对象使用const迭代器进行遍历打印vector<int>::const_iterator it = v.begin();while (it != v.end()){cout << *it << " ";++it;}cout << endl;
}

       大家可以结合我上一篇博客string一起来看看。

vector 空间增长问题

           接下来就是我们的数据空间相关的几个重要的关键词吧。我觉得这样讲也好理解。对于数据空间的关键词中我相信大家应该对size还有很深的影响吧。毕竟我们在c的时候想要获得数组的个数还是要写一串的哦。在c++的时候就只需要写这么几个就可以了。虽然我们开始是在string中学习的size。但是我们在前面也说过了。我们的vector与我们的string是有相似之处的。所以我们这里vector也是有size的。还有一些,大家看看下面的图片:

        这个大家要竖着看,别横着看哈。然后咧示例的话,大家看看下面的代码示例,应该也就了解的差不多了。

a.size(); //返回a中元素的个数;
a.capacity(); //返回a在内存中总共可以容纳的元素个数
a.resize(10); //将a的现有元素个数调至10个,多则删,少则补,其值随机
a.resize(10,2); //将a的现有元素个数调至10个,多则删,少则补,其值为2
a.reserve(100); //将a的容量(capacity)扩充至100,也就是说现在测试a.capacity();的时候返回值是100.这种操作只有在需要给a添加大量数据的时候才显得有意义,因为这将避免内存多次容量扩充操作(当a的容量不足时电脑会自动扩容,当然这必然降低性能) 

         这里还有一个点就是capacity的代码在vsg++下分别运行会发现,vscapacity是按1.5倍增长的,g++是按2倍增长的。这个问题经常会考察,不要固化的认为,vector增容都是2倍,具体增长多少是根据具体的需求定义的。就是说我们的vector在外面使用的时候会有一个大致的内存空间,然后我们使用的时候如果超了的话,那么就会默默的扩容,然后我们vs是扩的1.5倍。在linux是默认扩的2倍。所以当我们后面在使用voector的默认构造并且需要扩大容量的时候,最好先预定一下空间的大小,

        大家看看我们上面的图片,是一个对比图,一个是我们没有确定初始容量的,一个我们确定的容量的。大家不要觉得确定容量比较麻烦,但是当我们后面使用的时候就有大用的。

vector 增删查改 

        OK,了解了我们的空间增长问题后,我们就来学学修改空间数据的关键词。虽然我们在string的博客中没有提及,那时因为我觉得vector反正也会有相关知识的所以我就想大家先看看我发的那个链接看着,然后我在这一篇博客在说明一下,大家应该就理解的差不多了。那么我们这里就先来看看大概有哪几个关键词:

         也正是我们图片上讲的,我们在vector增删查改经常用的是我们的尾插尾删。和数组下标。这个理解起来大家肯定不会很难,因为我们在c的时候应该都模拟实现过,所以我们这里就不解释了,我们就直接看看例子:

void TestVector4()
{vector<int> v;v.push_back(1);v.push_back(2);v.push_back(3);v.push_back(4);auto it = v.begin();while (it != v.end()) {cout << *it << " ";++it;}cout << endl;v.pop_back();v.pop_back();it = v.begin();while (it != v.end()) {cout << *it << " ";++it;}cout << endl;
}
// 任意位置插入:insert和erase,以及查找find
// 注意find不是vector自身提供的方法,是STL提供的算法

          大家需要注意尾插与尾插开头写的是什么哈,别到时候记混了。到时候一编译牛头不对马嘴。但是我们大家需要注意一下

vector<int> a;
for(int i=0;i<10;i++)a[i]=i;这种做法以及类似的做法都是错误的。我们要记得下标只能用于获取已存在的元素,而现在的a[i]还是空的对象。
void TestVector6()
{vector<int> v{ 1, 2, 3, 4 };// 通过[]读写第0个位置。v[0] = 10;cout << v[0] << endl;// 使用for+[]小标方式遍历for (size_t i = 0; i < v.size(); ++i)cout << v[i] << " ";cout << endl;vector<int> swapv;swapv.swap(v);cout << "v data:";for (size_t i = 0; i < v.size(); ++i)cout << v[i] << " ";cout << endl;}

总结

       我知道关于vector的内容还有很多,我们这里就简单的举了几个我们后面在学习的时候可能会经常用的的几个,这里是希望大家可以提前了解因为,知道大概有哪些和使用方法。并且我这个半吊子实操的也比较少所以这就算一个预习资料吧,然后就是大家想看vector的全部并且看看示例和解释的话,大家可以点击下面的链接,去学习学习:cplusplus.com/reference/vector/vector/

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

金融知识普及月答题活动

金融知识普及月答题活动 关键词&#xff1a;金融安全、风险防范、金融常识、反诈宣传 推荐功能&#xff1a;答题、倡议书 宣传角度&#xff1a; 1. 普及金融知识&#xff1a;讲解货币、信用、利率、汇率等基本金融概念&#xff0c;以及储蓄、贷款、信用卡、保险等常见金融产…

Unity 图表插件Xcharts的一些坑

XY轴、图例文字不清晰。 2种方法解决 1&#xff1a;老套路&#xff0c;先放大再缩小&#xff0c;像素点多了就清晰了。 2&#xff1a;设置一个单独渲染的UI相机&#xff0c;把canvs所在的UI层级使用深度相机单独渲染,另一个选剔除UI的纯色或天空盒。同时&#xff0c;把改Canva…

基于Spring Boot的文字识别系统

前端使用htmlcssjs&#xff0c;后端使用Spring Boot&#xff0c;数据库使用mysql&#xff0c;识别算法有两个&#xff0c;一个是使用百度OCR接口&#xff0c;一个是自己写一个python&#xff0c;用flask包装。 其中百度OCR接口可以去免费申请&#xff0c;然后把appid、apikey、…

Java Web_00001

目录 Web项目介绍网页的组成部分 HTMLHTML简介HTML示例HTML文件的书写规范HTML标签标签介绍标签的语法&#xff1a;常用标签font特殊字符标题标签超链接列表标签img标签表格标签跨行跨列表格iframe框架标签(内嵌窗口)表单标签表单的显示表单格式化表单提交细节 其他标签 CSSCSS…

OpenHarmony轻松玩转GIF数据渲染

OpenAtom OpenHarmony&#xff08;以下简称“OpenHarmony”&#xff09;提供了Image组件支持GIF动图的播放&#xff0c;但是缺乏扩展能力&#xff0c;不支持播放控制等。今天介绍一款三方库——ohos-gif-drawable三方组件&#xff0c;带大家一起玩转GIF的数据渲染&#xff0c;搞…

CI/CD实践(五)Jenkins Docker 自动化构建部署Node服务

微服务CI/CD实践系列&#xff1a; 微服务CI/CD实践&#xff08;一&#xff09;环境准备及虚拟机创建 微服务CI/CD实践&#xff08;二&#xff09;服务器先决准备 微服务CI/CD实践&#xff08;三&#xff09;gitlab部署及nexus3部署 微服务CI/CD实践&#xff08;四&#xff09…

GraphPad Prism下载安装教程怎样中文汉化

GraphPad Prism下载安装教程怎样中文汉化&#xff1a; GraphPad Prism 是一款集生物统计、曲线拟合和科技绘图于一体的软件&#xff0c;主要用于医学和生物科学领域的数据分析和绘图&#xff0c;具有高效、简便、多功能和高质量的特点&#xff0c;被广泛应用于科研、教育和业界…

湖南的智榜样网络安全公司开的培训学校参加学习成为网络安全工程师

学习网络安全可以通过以下步骤进行&#xff1a; 获取基础知识&#xff1a;开始学习网络安全之前&#xff0c;建议先获取一些计算机基础知识&#xff0c;包括计算机网络、操作系统、编程语言等方面的知识。这些基础知识将为你理解和学习网络安全提供必要的背景。 学习网络安全基…

安卓13去掉权限动态申请,默认授权,不用动态申请权限

总纲 android13 rom 开发总纲说明 1、前言 2、问题分析 3.代码处理 4.代码修改 5.编译 6.彩蛋 1、前言

day44——C++对C的扩充

八、C对函数的扩充 8.1 函数重载&#xff08;overload&#xff09; 1> 概念 函数重载就是能够实现"一名多用"&#xff0c;是实现泛型编程的一种 泛型编程&#xff1a;试图以不变的代码&#xff0c;来实现可变的功能 2> 引入背景 程序员在写函数时&#x…

C++语法基础(二)

C复合类型 结构体 1. C的结构&#xff0c;定义结构体类型的变量时&#xff0c;可以省略struct关键字 2. 可以定义成员函数&#xff0c;在结构体中的成员函数内部可以直接访问本结构体的成员&#xff0c;无需通过“.”或“->” 联合 1. C的联合,定义联合体类型的变…

Linux系统ubuntu20.04 无人机PX4 开发环境搭建(失败率很低)

PX4固件下载 PX4的源码处于GitHub&#xff0c;因为众所周知的原因git clone经常失败&#xff0c;此处从Gitee获取PX4源码和依赖模块。 git clone https://gitee.com/voima/PX4-Autopilot.git 正克隆到 ‘PX4-Autopilot’… remote: Enumerating objects: 454209, done. remot…

Apache CloudStack Official Document 翻译节选(十二)

快速部署一朵 Apache CloudStack 云 &#xff08;一&#xff09; 部署前的准备工作 Apache CloudStack快速部署指南 我们究竟在构建什么&#xff1f; 构建IAAS云是一件很复杂的事项&#xff0c;根据相关定义&#xff0c;构建IAAS云的可选项有很多。这些纷繁复杂的概念通常给…

WLAN原理实验简述——AP上线

一、需求&#xff1a; AP通过AC上线。 AC通过控制VLAN管理AP,创建VLAN100和放行。 AP同AC建立CAPWAP关系。 二、实验拓扑图&#xff1a; 三、实验步骤&#xff1a; LSW1: sys Enter system view, return user view with CtrlZ. [Huawei]Sysname lsw1 [lsw1]undo info enable I…

扩散模型(Diffusion Model)

扩散模型&#xff08;diffusion model&#xff09;是一种运用了物理热力学扩散思想的生成模型。扩散模型有很多不同的变形&#xff0c;本文主要介绍最知名的去噪扩散概率模型&#xff08;Denoising Diffusion Probabilistic Model&#xff0c;DDPM&#xff09;。如今比较成功的…

Notepad++回车不自动补全

问题 使用Notepad时&#xff0c;按回车经常自动补全&#xff0c;但我们希望回车进行换行&#xff0c;而不是自动补全&#xff0c;而且自动补全使用Tab进行补全足够了。下文介绍设置方法。 设置方法 打开Notepad&#xff0c;进入设置 - 首选项 - 自动完成&#xff0c;在插入选…

Windows上MSYS2的安装和使用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、下载二、安装三、使用1.打开命令行2.搜索软件3.安装软件4.卸载软件5.更新环境6.其他四、MSYS2和Cygwin的差别总结前言 MSYS2这个工具我是越用越喜欢,很多东西放在Linux上如鱼得水但是放在…

禁止文件外发 | 如何禁止员工外发文件?严守企业机密,禁止员工外发敏感文件!

近期&#xff0c;我们注意到一些敏感项目资料有外泄的风险&#xff0c;这对公司的核心竞争力构成了严重威胁&#xff01; 我们必须立即采取行动&#xff0c;严守企业机密&#xff0c;确保每一份文件都安全无虞。 从今天起&#xff0c;我们要全面升级信息安全措施&#xff0c;…

2024世界机器人大会盛大开幕,卓翼飞思携无人智能领域产品集中亮相 !

开放创新 聚享未来&#xff01;万众瞩目的2024世界机器人大会暨博览会于8月21日在北京亦创国际会展中心盛大开幕。大会聚焦机器人技术与产业前沿趋势&#xff0c;展示机器人创新应用赋能千行百业的多元场景&#xff0c;全球顶尖的机器人科学家、行业领袖、创新精英汇聚一堂&…

React学习day04-useEffect、自定义Hook函数

11、useEffect&#xff08;一个React Hook函数&#xff09; &#xff08;1&#xff09;作用&#xff1a;用于在React组件中创建不是由事件引起而是由渲染本身引起的操作&#xff0c;比如发送AJAX请求&#xff0c;更改DOM等&#xff08;即&#xff1a;视图渲染完后会触发一些事…