当前位置: 首页 > 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.dtcms.com/a/331890.html

相关文章:

  • Docker 入门与实战:从环境搭建到项目部署
  • Java构造器与工厂模式(静态工程方法)详解
  • 20道JavaScript相关前端面试题及答案
  • 2025.8.24复习总结
  • WAF 与 SIEM 联动:攻击事件的实时告警与溯源分析流程
  • 3D-R1、Scene-R1、SpaceR论文解读
  • C#:TryGetValue
  • C语言零基础第16讲:内存函数
  • 技术速递|通过 GitHub Models 在 Actions 中实现项目自动化
  • linux 下第三方库编译及交叉编译——MDBTOOLS--arm-64
  • 使用Docker安装Gitea自托管的Git服务
  • 零基础从头教学Linux(Day 12)
  • python+vue扫盲
  • 智能制造综合实训平台数据采集物联网解决方案
  • 备忘录模式及优化
  • 多窗口多烧蚀(Multi-window, Multi-Burn-Rate, MWMBR)
  • 苹果AI战略布局:重新定义智能家居与AI助手的未来
  • TDengine IDMP 基本功能(7. 智能问数)
  • 乘积小于K的子数组
  • flstudio.exe安装教程|FL Studio怎么下载安装?超简单中文指南
  • 状态管理、网络句柄、功能组和功能组状态的逻辑关系
  • 微服务架构概述
  • 《算法导论》第 24 章 - 单源最短路径
  • stm32项目(28)——基于stm32的环境监测并上传至onenet云平台
  • 手机实时提取SIM卡打电话的信令声音-整体解决方案规划
  • Linux新手上路 | 在Ubuntu上Pluma文本编辑器的安装与基本使用
  • 大模型部署基础设施搭建 - Open WebUI
  • 小知识:for of,for in与forEach
  • Stable Diffusion Models are Secretly Good at Visual In-Context Learning
  • localhost:5501与本机ip:5501不同源