当前位置: 首页 > news >正文

vector 认识及使用

vector其实就是我们熟悉的顺序表 和string一样在std标准库中被作为一个类名  其实是类模版名 写成类模版 为了存各个各样的数据 里面的大致结构可以理解为以下(不是真的是这样 先这样理解方便使用)

在使用上类似于之前的string 不过这里的vector是类模版 在创建对象的时候还要显示实例化

如下图  aabb  和cc  dd分别会实例化出三个不同的类 一个是存int 一个存float 一个存double

通过实例化出的类再调用他们的构造函数进行了初始化

如下 传迭代器的方式进行初始化

如下 打印也和string一样 有三种方式 下标访问 迭代器 范围for

在扩容上vs采取1.5倍的扩容方式 初始化0 第一次为1  之后*1.5然后四舍五入的方式

同样使用reserve之后就不需要频繁地扩容了

resize使用也和string一样 resize的值小于size时候多出的数直接去掉capacity不变

大于size小于capacity的时候 如果第二个参数没有值默认0来填充 显示写了 用写的值填充

大于capacity会进行扩容并填充

这里的insert 选择插入的位置时候不能用下标来选择了 只能用迭代器

也可以用下标的方式来对里面的数据进行改变 如果要用范围for的的方式改变数据 这里要用引用的方式   用范围for打印的时候 如果是内置类型用不用引用区别不大 但是如果是自定义类型的话这里还需要拷贝 就需要很大的额外空间了  就有必要用引用

之前的string我们自己也写过其底层的一些功能了 我们知道string其实也是顺序表 这里的vector就是顺序表的类模版  这里用char来显示实例化那这不就是个存储着char类型的顺序表了吗 那为什么还要有string呢

string类型的变量 在末尾是有\0 的   而vector实例化的存储char类型在最后没有\0

string有了\0且有_str(转换成c风格的字符串) 所以string类型可以很好的兼容c语言而vector实例化的存储char类型的不可以

同时 对于字符串来说很常用的substr返回子串等功能 在vector实例化出的存储char类型的里面没有这些功能 

在string中之前看过为了兼容c风格的字符串每个函数的功能都重载了很多个 而对vector而言很多的功能都是直接用到迭代器的 不能兼容c风格的字符串

vector不仅仅只能存储一些简单的的内置类型   自定义类型 string类型 或者是vector<int>这样子都可以进行存储

如下 存储着string类型 可以直接尾插string类型  也可以直接尾插字符串(这里的字符串隐式转换为了string类型)

用vector<vector<int>>  这种方式来创建就类似于二维数组了

xx相当于下图的第一个里面存着10个int类型的值 

ve相当于下图的第二个里面存着10个vector<int>类型的值  里面的每一个对象相当于一个上面的全部 里面的每一个都存在10个int类型的值

要改变里面的值就需要用两层[]来访问 打印的时候 用范围for位置下标打印也需要两层

知道这些后 我们就可以用这些来完成杨辉三角的题目

代码如下

先创建一个vector<vector<int>>类型的对象ss  用numRows个vector<int>进行初始化 这里没有传第二个参数 相当于每一个vector<int> 类型的对象都进行了默认的构造函数进行初始化 然后第一层for循环让每一层都保留i个数 没有的用1来填充 这样就相当于每一行的首位都初始化为了1

然后后面两层嵌套for循环让从三层到最后一层除了首尾位置的值为上一层同一个位置和上一层的前一个位置的和

class Solution {
public:vector<vector<int>> generate(int numRows) {vector<vector<int>> ss(numRows);for(int i=0;i<numRows;i++){ss[i].resize(i+1,1);}for(int j=2;j<numRows;j++){for(int k=1;k<j;k++){ss[j][k]=ss[j-1][k]+ss[j-1][k-1];}}return ss;}
};

其实vector里面不是最开始那样和string一样 一个指针指向起始位置 一个size 一个capacity

实际上是三个指针 如下 start指向第一个位置  finish指向最后一个元素的后一个位置 end_of_storage指向能存储个数的后一个位置 

 

http://www.lryc.cn/news/620926.html

相关文章:

  • MTK平台Wi-Fi学习--如何修改wifi 的TX Power
  • 计算机毕设大数据选题推荐 基于spark+Hadoop+python的贵州茅台股票数据分析系统【源码+文档+调试】
  • STL——容器——容器适配器
  • Mac chrome浏览器下载DevEco Studio 6.0.0 Beta2失败
  • MacOS 系统计算机专业好用工具安装
  • Spring Boot 深度解析:从原理到实践
  • 亚马逊手工制品分类体系革新:从流量重构到运营升级的深度解析
  • [已解决]当启动 Spring Boot 应用时出现 Using generated security password xxx提示
  • Rust Web框架Axum学习指南之入门初体验
  • vue部署正式环境上传nginx后遇到的问题
  • MySQL中的DML(二)
  • mysql查询中的filesort是指什么
  • 第三方软件检测:软件性能测试报告(一)
  • CMake笔记:Alias Target在哪些地方可以使用
  • 使用Docker安装MeiliSearch搜索引擎
  • 【完整源码+数据集+部署教程】柠檬质量检测系统源码和数据集:改进yolo11-DBBNCSPELAN
  • nginx入门需知(含安装教程)
  • 知识的本质
  • 【MATLAB技巧】已知平面上的一些点,拟合得到一个圆的例程,给出最小二乘与非线性迭代两种解法,附下载链接
  • Swift 数据类型全景解析(基础到高阶)
  • Gradle(四)Maven 项目迁移 Gradle 项目实践
  • [激光原理与应用-274]:理论 - 波动光学 - 光是电磁波,无线电磁波可以通过天线接收和发送,为什么可见光不可以?
  • 滑动窗口题目:定长子串中元音的最大数目
  • 【读代码】开源流式语音编码器SecoustiCodec
  • MySQL的索引(索引的创建和设计原则):
  • python自学笔记8 二维和三维可视化
  • 业务敏捷性对SAP驱动型企业意味着什么?如何保持企业敏捷性?
  • 网络通信全过程:sk_buff的关键作用
  • ⭐CVPR2025 3D 高斯探测视觉基础模型3D能力
  • Mybatis学习笔记(五)