如何熟练使用vector?

在这里插入图片描述

🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨
🐻推荐专栏1: 🍔🍟🌯C语言初阶
🐻推荐专栏2: 🍔🍟🌯C语言进阶
🔑个人信条: 🌵知行合一
🍉本篇简介:>:介绍vector的使用

vector官网链接:传送门

目录

  • 一、构造函数
    • (1)无参构造
    • (2)初始化为n个值
    • (3) 迭代器区间初始化
    • (4)拷贝构造
  • 二、容量操作
    • (1) 一览表
    • (2) 代码演示
  • 三、修改与访问
    • (1) push_back && pop_back
      • assign()
    • (2) insert()
    • (3) erase()函数
    • (4) swap()
    • (5) `[]`运算符重载

一、构造函数

在这里插入图片描述

构造函数含义
vector (const allocator_type& alloc = allocator_type());无参构造
vector(size_type n, const value_type& val = value_type())初始化为nval
vector (InputIterator first, InputIterator last,const allocator_type& alloc = allocator_type())迭代器区间初始化
vector (const vector& x);拷贝构造

(1)无参构造

默认什么元素也没有.
有效元素个数:size=0
容量:capacity=0;

	//无参构造vector<int> v1;//auto it1 = v1.begin();//可以使用auto自动推导类型vector<int>::iterator it1 = v1.begin();while (it1 != v1.end()){cout << *it1 << " ";it1 ++ ;}cout << "v1.size=" << v1.size() << endl;cout << "v1.capacity=" << v1.capacity() << endl;cout << endl;

运行结果:

v1.size=0
v1.capacity=0

(2)初始化为n个值

nval去初始化vector;

	//初始化为n个值vector<int> v2(4,0);//auto it2 = v2.begin();vector<int>::iterator it2 = v2.begin();while (it2 != v2.end()){cout << *it2 << " ";it2++;}cout << endl;

运行结果:

0 0 0 0

(3) 迭代器区间初始化

用一个迭代器区间进行初始化,这里采用数组的头和尾作为迭代器区间.

	//迭代器区间初始化int a3[10] = { 1,3,4,5,6,7,8,98,100,11 };vector<int> v3(a3, a3 + 10);//注意这里给的是+10,因为迭代器的end是指向最后一个有效元素的下一个位置,左闭右开auto it3 = v3.begin();while (it3 != v3.end()){cout << *it3 << " ";it3++;}cout << endl;

运行结果:

1 3 4 5 6 7 8 98 100 11

(4)拷贝构造

	//拷贝构造vector<int> v4(v3);//v3就是上面的迭代器区间初始化好的v3auto it4 = v4.begin();while (it4 != v4.end()){cout << *it4 << " ";it4++;}cout << endl;

运行结果:

1 3 4 5 6 7 8 98 100 11

二、容量操作

在这里插入图片描述

(1) 一览表

接口说明
size()有效数据的个数
resize()改变有效数据的个数
capacity()容量大小
empty()判空
reserve()改变容量大小

(2) 代码演示

void test2()
{int a1[10] = { 1,3,4,5,6,7,8,98,100,11 };vector<int> v1(a1, a1 + 10);cout << "v1.size()=" << v1.size() << endl;//显示有效数据的个数cout << "v1.capacity()=" << v1.capacity() << endl;//显示容量的大小cout << "v1.empty()=" << v1.empty() << endl;//判断容器是否为NULLcout << endl;v1.resize(5);//改变有效数据的个数cout << "v1.size()=" << v1.size() << endl;cout << "v1.capacity()=" << v1.capacity() << endl;vector<int>::iterator it1 = v1.begin();while (it1 != v1.end()){cout << *it1 << " ";it1++;}cout << endl;v1.resize(15,66);cout << "v1.size()=" << v1.size() << endl;cout << "v1.capacity()=" << v1.capacity() << endl;cout << endl;it1 = v1.begin();while (it1 != v1.end()){cout << *it1 << " ";it1++;}cout << endl;v1.reserve(10);//改变容量的大小.cout << "v1.capacity()=" << v1.capacity() << endl;v1.reserve(50);cout << "v1.capacity()=" << v1.capacity() << endl;}

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

三、修改与访问

在这里插入图片描述

接口说明
assign()将新内容覆盖给容器,替换其当前内容,并相应地修改其大小。
push_back()尾插
pop_back()尾删
insert()指定位置pos之前插入
erase()删除指定位置pos的值
swap()交换两个容器
operator[ ]()下标访问运算符重载

(1) push_back && pop_back

尾插和尾删相信大家已经比较熟悉了.

assign()

assign函数需要注意.
void assign (size_type n, const value_type& val);

如果n<size,则是将nval将原有数据覆盖,令size=n,而不修改容量.
如果n>size,则先扩容,再将nval值存入.

	//push_back &&pop_backint a1[5] = { 1,2,3,4,5 };vector<int> v1(a1, a1 + 5);for (auto itt : v1){	//1 2 3 4 5cout << itt << " ";}cout << endl;//尾插v1.push_back(6);v1.push_back(7);for (auto itt : v1){	//1 2 3 4 5 6 7cout << itt << " ";}cout << endl;//尾删v1.pop_back();for (auto itt : v1){	//1 2 3 4 5 6cout << itt<<" ";}cout << endl;//将新内容覆盖给容器,替换其当前内容,并相应地修改其大小v1.assign(5, 2);for (auto itt : v1){	//2 2 2 2 2cout << itt << " ";}cout << endl << v1.size() << " " << v1.capacity() << endl;//5 7cout << endl;

运行结果:

1 2 3 4 5
1 2 3 4 5 6 7
1 2 3 4 5 6
2 2 2 2 2
5 7

(2) insert()

指定位置pos之前插入.
在这里插入图片描述

代码演示:

	int a1[5] = { 1,2,3,4,5 };vector<int> v1(a1, a1 + 5);for (auto itt : v1){cout << itt << " ";}cout << endl;//iterator insert(iterator position, const value_type & val);v1.insert(v1.begin() + 2, 66);//在第三个位置的前面插入数据.for (auto itt : v1){cout << itt<<" ";}cout << endl;//void insert(iterator position, size_type n, const value_type & val);v1.insert(v1.begin() + 5, 5, -1);//在第六个位置的前面插入5个-1.for (auto itt : v1){cout << itt << " ";}cout << endl;int a2[5] = { 1,2,3,4,5 };int a3[5] = { 6,7,8,9,10 };vector<int> v2(a2, a2 + 5);for (auto itt : v2){cout << itt << " ";}cout << endl;//void insert (iterator position, InputIterator first, InputIterator last);v2.insert(v2.begin()+5,a3 ,a3 + 5);for (auto itt : v2){cout << itt << " ";}cout << endl;

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

(3) erase()函数

在这里插入图片描述

删除指定位置pos的值

	//eraseint a4[10] = { 1,2,3,4,5,6,7,8,9,10 };vector<int> v4(a4, a4 + 10);for (auto itt : v4){cout << itt << " ";}cout << endl;//iterator erase (iterator position);v4.erase(v4.begin() + 1);for (auto itt : v4){cout << itt << " ";}cout << endl;//iterator erase (iterator first, iterator last);v4.erase(v4.begin()+4, v4.begin() + 9);for (auto itt : v4){cout << itt << " ";}cout << endl;

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

(4) swap()

用于交换两个容器,注意观察交换后容量的变化.

//swap//void swap(vector & x);int a5[10] = { 1,2,3,4,5,6,7,8,9,10 };vector<int> v5(a5, a5 + 10);int a6[10] = { 2,4,6,8,10 };vector<int> v6(a6, a6+5);cout << "v5=";for (auto itt : v5){cout << itt << " ";}cout << endl;cout << "v6=";for (auto itt : v6){cout << itt << " ";}cout << endl;swap(v5, v6);cout << endl;cout << "v5=";for (auto itt : v5){cout << itt << " ";}cout << endl;cout << "v6=";for (auto itt : v6){cout << itt << " ";}cout << endl;cout << "v5.capacity()" << v5.capacity();cout << endl;cout << "v6.capacity()" << v6.capacity();cout << endl;

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

(5) []运算符重载

可以像数组一样通过下标直接访问.

	//[]int a7[10] = { 1,2,3,4,5,6,7,8,9,10 };vector<int> v7(a5, a5 + 10);cout << "v7=";for (int i = 0; i < 10; i++){cout << v7[i] << " ";}

v7=1 2 3 4 5 6 7 8 9 10

vector的使用就分享到这里了.下一期vector模拟实现见.

在这里插入图片描述

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

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

相关文章

Blender 围绕自身的原点旋转与游标旋转

默认情况下的旋转是&#xff0c;R后旋转是物体自身的原点旋转 可以修改为围绕游标旋转&#xff0c;通过旋转R时 局部与全局坐标 全局的坐标不会变 局部的会随着物体的旋转变化 如果平稳时GZZ会在全局到局部坐标之间切换 或在局部到全局之间的切换 学习视频&#xff1a;【基础…

PaddleNLP使用Vicuna

LLaMA 模型 LLaMa 是一个大型语言模型&#xff0c;由 Meta 开源。它的全称是 Large Language Model Meta AI&#xff0c;参数量从 70 亿到 650 亿不等。例如&#xff0c;130 亿参数的 LLaMA 模型在大多数基准上可以胜过参数量达 1750 亿的 GPT-3&#xff0c;而且可以在单块 V1…

go语言-channel

环形缓存可以降低GC得开销 channel使用得是mutex锁 互斥锁并不是排队发送/接收数据 互斥锁保护的hchan结构体本身 Channel并不是无锁的 底层发送原理 c<- 关键字是一个语法糖 编译阶段&#xff0c;会把 c<- 转化为 runtime.chansend10 chansend10会调用 charsend0 方法…

使用 FastChat 运行 CodeLlama-7b-Instruct-hf

使用 FastChat 运行 CodeLlama-7b-Instruct-hf 1. 确认 FactChat 支持的 Model2. 升级依赖3. 启动 controller4. 启动 CodeLlama5. 启动 api server6. VSCode 中使用 CodeLlama 1. 确认 FactChat 支持的 Model 访问 model_support.md&#xff0c;确认 codellama/CodeLlama-7b-…

【100天精通Python】Day53:Python 数据分析_NumPy数据操作和分析进阶

目录 1. 广播 2 文件输入和输出 3 随机数生成 4 线性代数操作 5 进阶操作 6 数据分析示例 1. 广播 广播是NumPy中的一种机制&#xff0c;用于在不同形状的数组之间执行元素级操作&#xff0c;使它们具有兼容的形状。广播允许你在不显式复制数据的情况下&#xff0c;对不同…

小程序数据导出文件

小程序josn数据生成excel文件 先从下载传送门将xlsx.mini.min.js拷贝下来&#xff0c;新建xlsx.js文件放入小程序项目文件夹下。 const XLSX require(./xlsx)//在需要用的页面中引入// 定义导出 Excel 报表的方法exportData() {const that thislet newData [{time:2021,val…

用XSIBackup为VMware ESXi打造完美备份方案

文章目录 VMware ESXi 备份方案引言XSIBackup安装步骤1. XSIBackup软件安装2. SSH连接3. 定位到xsibackup目录4. 修改文件权限5. 安装cron查看crontab列表6. 配置备份任务结论VMware ESXi 备份方案 引言 数据就像是我们的生命线,一旦丢失,可能会带来无法挽回的损失。对于那…

AI绘画:StableDiffusion实操教程-斗罗大陆2-江楠楠-常服(附高清图下载)

前段时间我分享了StableDiffusion的非常完整的教程&#xff1a;“AI绘画&#xff1a;Stable Diffusion 终极宝典&#xff1a;从入门到精通 ” 尽管如此&#xff0c;还有读者反馈说&#xff0c;尽管已经成功安装&#xff0c;但生成的图片与我展示的结果相去甚远。真实感和质感之…

uniapp微信小程序用户隐私保护

使用wx.requirePrivacyAuthorize实现微信小程序用户隐私保护。 一、前言 微信小程序官方出了一个公告《关于小程序隐私保护指引设置的公告》。不整的话&#xff0c;后果很多授权无法使用&#xff0c;详见《小程序用户隐私保护指引内容介绍》 。 二、隐私相关设置 1、在 微信…

关于大模型参数微调的不同方法

Adapter Tuning 适配器模块&#xff08;Adapter Moudle&#xff09;可以生成一个紧凑且可扩展的模型&#xff1b;每个任务只需要添加少量可训练参数&#xff0c;并且可以在不重新访问之前任务的情况下添加新任务。原始网络的参数保持不变&#xff0c;实现了高度的参数共享 Pa…

CSS中如何隐藏元素但保留其占位空间(display:nonevsvisibility:hidden)?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 隐藏元素但保留占位空间⭐ display: none;⭐ visibility: hidden;⭐ 总结⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&a…

基于Django的博客管理系统

1、克隆仓库https://gitee.com/lylinux/DjangoBlog.git 若失效&#xff1a;https://gitee.com/usutdzxy/DjangoBlog.git 2、环境安装 pip install -Ur requirements.txt3、修改djangoblog/setting.py 修改数据库配置&#xff0c;其他的步骤就按照官方文档。 DATABASES {def…

dubbo服务管控

我们已经介绍了Dubbo在服务治理方面提供的特性&#xff0c;今天我们一起来看看Dubbo在其它方面提供的特性。同服务治理篇一样&#xff0c;本文的目的在于学会使用Dubbo在服务管控方面提供的特性&#xff0c;依旧不涉及任何实现原理。 工程结构 嗯~~ 是这样的&#xff0c;因为…

登录校验的相关知识点

登录校验的相关知识点 【1】会话技术1)会话:2)会话跟踪:3)常见的几种会话跟踪&#xff1a; 【2】JWT令牌1)定义解释2&#xff09;测试生成Jwt令牌并解析3&#xff09;注意事项 【3】过滤器Filter1)过滤器工作原理如下&#xff1a;2)简单使用示例3)自定义拦截路径4)疑问5)过滤器…

【Linux】简单的小程序:进度条

在学习进度条之前&#xff0c;需要学一点预备知识。 1. 预备知识 回车换行 现在的换行符&#xff08;\n&#xff09;其实就是回车式换行符&#xff0c;另起一行&#xff0c;光标指向最新一行的开头。回车符&#xff08;\r&#xff09;是光标指向这一行的开头。 缓冲区 &a…

VR全景对行业发展有什么帮助?VR全景制作需要注意什么?

引言&#xff1a; 虚拟现实&#xff08;Virtual Reality&#xff0c;简称VR&#xff09;早已不再是科幻电影的概念&#xff0c;而是在以惊人的速度改变着我们的世界。VR全景&#xff0c;作为其中的重要组成部分&#xff0c;正为多个行业带来了全新的机遇。 一、VR全景的应用领…

WebGL Varing变量的作用和内插过程,及执行Varing时涉及的图形装配、光栅化、颜色插值、片元着色器执行机制等详解

目录 前言 在 WebGL 或 OpenGL 中&#xff0c;“varying” 是一种用于在顶点着色器和片元着色器之间传递数据的特殊类型的变量。它允许在顶点着色器对数据进行处理后&#xff0c;在片元着色器中使用该处理后的数据进行进一步计算。 彩色三个点 ​编辑 彩色三个点示例代码…

大数据可视化大屏实战项目(4)物流数据云看台(包括动态登陆页面)—HTML+CSS+JS【源码在文末】(可用于比赛项目或者作业参考中)

大数据可视化大屏实战项目&#xff08;4&#xff09;物流数据云看台&#xff08;包括动态登陆页面&#xff09;—HTMLCSSJS【源码在文末】&#xff08;可用于比赛项目或者作业参考中&#x1f415;&#x1f415;&#x1f415;&#xff09; 一&#xff0c;项目概览 ☞☞☞☞☞☞…

【STM32】学习笔记(TIM定时器)

TIM&#xff08;Timer&#xff09;定时器 定时器可以对输入的时钟进行计数&#xff0c;并在计数值达到设定值时触发中断 16位计数器、预分频器、自动重装寄存器的时基单元&#xff0c;在72MHz计数时钟下可以实现最大59.65s的定时 不仅具备基本的定时中断功能&#xff0c;而且…

Javase | IO流

目录&#xff1a; 1.输入 (Intput/Read)2.输出 (Output/Write)3.IO4.IO流5.IO流的分类&#xff1a;5.1 分类总述5.2 按照 “流的方向” 进行分类5.3 按照 “读取数据的方式” 进行分类 6.IO包下要重点掌握的流&#xff1a;6.1 文件专属 (流)6.2 转换流 ( 将字节流转换为字符流 …