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

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.xdnf.cn/news/17834.html

相关文章:

  • 【论文阅读-Part1】PIKE-RAG: sPecIalized KnowledgE and Rationale Augmented Generation
  • 如何通过WiFi将文件从安卓设备传输到电脑
  • Scrapy 基础框架搭建教程:从环境配置到爬虫实现(附实例)
  • Pytorch在FSDP模型中使用EMA
  • 考研408《计算机组成原理》复习笔记,第四章(3)——指令集、汇编语言
  • 14、C 语言联合体和枚举知识点总结
  • Linux系统Namespace隔离实战:dd/mkfs/mount/unshare命令组合应用
  • 报数游戏(我将每文更新tips)
  • 2022 年全国硕士研究生招生考试真题笔记
  • 杂记 01
  • elasticsearch基础概念与集群部署
  • Blender模拟结构光3D Scanner(一)外参数匹配
  • ARM芯片架构之CoreSight Channel Interface 介绍
  • 20250813测试开发岗(凉)面
  • Spring Security 前后端分离场景下的会话并发管理
  • 商品分类拖拽排序设计
  • 数据结构:队列(Queue)与循环队列(Circular Queue)
  • 【SpringBoot系列-01】Spring Boot 启动原理深度解析
  • 【OpenGL】LearnOpenGL学习笔记07 - 摄像机
  • 《设计模式之禅》笔记摘录 - 15.观察者模式
  • 分布式与微服务宝典
  • Redis基础命令
  • 电商项目微服务架构拆分实战
  • LangGraph 指南篇-基础控制
  • 2025盛夏AI热浪:八大技术浪潮重构数字未来
  • HTML第三次作业
  • C语言相关简单数据结构:顺序表
  • 【深入浅出STM32(1)】 GPIO 深度解析:引脚特性、工作模式、速度选型及上下拉电阻详解
  • IPC Inter-Process Communication(进程间通信)
  • 桌面运维如何深造