C++——vector

1.简介

2.成员函数

2.1构造函数

void test_vector1()
{//1.无参构造vector<int> v1;cout << v1.capacity() << endl;//2.传参构造vector<int> v2(10,1);//3.迭代器构造vector<int> v3(v2.begin(), v2.end());//也可以使用其它容器的迭代器区间来初始化string s1("hello world");vector<int> v4(s1.begin(), s1.end());//这里数据类型不匹配,但是会隐式类型转换//char类型提升成int,会把ASCII码值传过去//4.拷贝构造vector<int> v5(v3);
}

3.遍历方式

void test_vector1()
{vector<int> v1(10,1);//1.[]for (size_t i = 0; i < v1.size(); i++){cout << v1[i] << " ";}cout << endl;//2.迭代器//vector<int>::iterator it = v1.begin();auto it = v1.begin();while (it != v1.end()){cout << *it << " ";it++;}cout << endl;//3.范围forfor (auto a : v1){cout << a << " ";}cout << endl;
}

4.扩容机制

void test_vector2()
{//扩容机制size_t sz;vector<int> v;sz = v.capacity();cout << "making v grow:\n";for (int i = 0; i < 100; ++i){v.push_back(i);if (sz != v.capacity()){sz = v.capacity();cout << "capacity changed: " << sz << '\n';}}}

5.Capacity

5.1 max_size

void test_vector3()
{vector<int> v1;cout << v1.max_size() << endl;vector<char> v2;cout << v2.max_size() << endl;string s1;cout << s1.max_size() << endl;}

5.2reserve和resize

void test_vector4()
{vector<int> v1;v1.reserve(100);//想要预先开空间,就使用reserve//这里就不会进去,因为size还是0,只是capacity变成了100for (size_t i = 0; i < v1.size(); i++){v1[i] = i;//cout << v1[i] << " ";}cout << endl;for (auto a : v1){cout << a << " ";}cout << endl;}

那如果强行进入循环呢?

void test_vector4()
{vector<int> v1;v1.reserve(100);//那如果强行进去呢?//空间已经开出来了,能不能强行访问?for (size_t i = 0; i < 100; i++){v1[i] = i;//答案是不能的,会崩溃//这里的[]里面加了断言,断言访问的下标必须是小于size的,大于size说明越界了//但注意:断言在release下不起作用}cout << endl;}

顺序表和数组有个区别

顺序表有个规定,数据必须是在0到size-1,数据是连续访问的,只能访问0到size-1的数据


所以这里想要访问只能使用resize
书写代码:v1.resize(100);
resize不给值的话默认使用0

5.3shrink_to_fit

shrink_to_fit是缩容接口
把当前容器的capacity缩为size,一般是异地缩容
它是以时间换空间的做法,一般不建议使用,空间比较廉价,而时间更为宝贵

6.Modifiers

6.1 push_back

void test_vector5()
{vector<int> v1;v1.push_back(1);v1.push_back(2);v1.push_back(3);v1.push_back(4);for (auto a : v1){cout << a << " ";}cout << endl;}

6.2 insert

void test_vector5()
{vector<int> v1;v1.push_back(1);v1.push_back(2);v1.push_back(3);v1.push_back(4);//头插v1.insert(v1.begin(), 0);for (auto a : v1){cout << a << " ";}cout << endl;}

如果想在3前面进行插入数据该怎么做

注意,vector中没有find函数,find写在算法库

6.3 algorithm:find

void test_vector5()
{vector<int> v1;v1.push_back(1);v1.push_back(2);v1.push_back(3);v1.push_back(4);//想在3前面进行插入数据auto it = find(v1.begin(), v1.end(), 3);if (it != v1.end()){v1.insert(it, 100);//默认插入都是在当前位置之前}//注意:find写在算法库中}

6.4 erase

void test_vector5()
{vector<int> v1;v1.push_back(1);v1.push_back(2);v1.push_back(3);v1.push_back(4);//想在3前面进行插入数据auto it = find(v1.begin(), v1.end(), 3);if (it != v1.end()){v1.insert(it, 100);//默认插入都是在当前位置之前}it = find(v1.begin(), v1.end(), 3);v1.erase(it);//for (auto a : v1){cout << a << " ";}cout << endl;}

6.5clear

void test_vector5()
{vector<int> v1;v1.push_back(1);v1.push_back(2);v1.push_back(3);v1.push_back(4);//clear一般不清理capacitycout << v1.size() <<" "<< v1.capacity() << endl;v1.clear();cout << v1.size() << " " << v1.capacity() << endl;v1.shrink_to_fit();//想要释放空间只能调用这个函数}

6.6 emplace和emplace_back

emplace和insert功能相似
emplace_back和push_back功能相似
emplace和emplace_back在有些场景下会更高效一些

7.非成员函数重载

注意,vector还有其它的容器都没有去实现流插入和流提取

在string中,字符串打印没有争议,不加任何修饰地打印即可

但其它容器并不适用

8.练习题

8.1

144. 二叉树的前序遍历 - 力扣(LeetCode)

8.2

136. 只出现一次的数字 - 力扣(LeetCode)

C语言实现起来相当复杂

C++就会便捷许多

8.3

118. 杨辉三角 - 力扣(LeetCode)

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

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

相关文章

scrapy快速上手

安装 除了scrapy本身还要安装两个库 pip install scrapy pip install pywin32 pip install wheel 创建项目 在要创建项目的地方打开powershell scrapy startproject 项目名 我们得到这样的项目结构&#xff0c;功能如下 scrapy.cfg 项目的主配置信息 …

LeetCode[中等] 17. 电话号码的字母组合

给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 思路 回溯法 log&#xff1a;当前结果数组&#xff1b;level&#xff1a…

第五届计算机科学与管理科技国际学术会议(ICCSMT 2024)

梁哲&#xff0c;同济大学长聘特聘教授&#xff0c;国家杰青、首届国家杰青延续项目获得者、上海市曙光学者、上海市优秀学术带头人。本科毕业于新加坡国立大计算机工程系、硕士毕业于新加坡国立大学工业与系统工程系、博士毕业于美国新泽西州立大学工业工程系。理论研究主要集…

修改Opcenter EXFN 页面超时时间(Adjust UI Session Extend Token)

如果你想修改Opcenter EXFN中页面Session的超时时间&#xff0c;你可以按照如下步骤修改SessionAge 这个参数&#xff1a; 管理员运行CMD执行以下命令 umconf -getconfig -file C:\temp\config.json如果第2步有报错&#xff0c;则执行步骤4;如果没有报错则执行第5步如果第2步…

探索光耦:光耦在电脑电源中的应用及其重要性

随着计算机技术的飞速发展&#xff0c;电脑已成为现代生活和工作中不可或缺的工具。无论是日常办公、游戏娱乐还是复杂的图像处理&#xff0c;电脑电源的稳定性和安全性都至关重要。作为电脑电源的核心部件之一&#xff0c;光耦&#xff08;光电耦合器&#xff09;在提升电源性…

JavaScript网页设计案例:互动式简历网站

JavaScript网页设计案例&#xff1a;互动式简历网站 在现代网页设计中&#xff0c;JavaScript 是实现交互和动态效果的关键技术。本文将通过一个完整的案例&#xff0c;展示如何使用 JavaScript 构建一个交互式的个人简历网页。本文不仅会涵盖 HTML 和 CSS 的使用&#xff0c;…

android和ios双端应用性能的测试工具

1.工具介绍 基于日常工作的需要&#xff0c;开发了一款新的android和ios端应用性能测试工具&#xff0c;本工具在数据测试方面与所流行的工具没有区别。欢迎下载使用体验。 本工具为筋斗云&#xff0c;工具说明 本工具无侵入&#xff0c;不需要root&#xff0c;低延迟…

(十七)、Mac 安装k8s

文章目录 1、Enable Kubernetes2、查看k8s运行状态3、启用 kubernetes-dashboard3.1、如果启动成功&#xff0c;可以在浏览器访问3.2、如果没有跳转&#xff0c;需要单独安装 kubernetes-dashboard3.2.1、方式一&#xff1a;一步到位3.2.2、方式二&#xff1a;逐步进行 1、Enab…

如何恢复被删除的 GitLab 项目?

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料&#xff1a; 极狐GitLab 官网极狐…

time命令:轻松测量Linux命令执行时间!

一、命令简介 用途&#xff1a; 用于测量 Linux 命令执行的时间&#xff0c;包括实际时间、用户 CPU 时间和系统 CPU 时间。刚开始以为是用来“看现在几点钟”的 &#x1f972;。标签&#xff1a; 实用工具&#xff0c;性能分析。 ‍ 二、命令参数 2.1 命令格式 time [选项…

进程的那些事--实现shell

目录 前言 一、预备知识 二、实现步骤 1.思路 2.实现 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 学习的本质就是变现 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、预备知识 char * fgets ( char * str, i…

讯飞星火编排创建智能体学习(二)决策节点

目录 概述 决策节点 文生图节点 连接节点 测试结果 概述 在上一篇博文讯飞星火编排创建智能体学习&#xff08;一&#xff09;最简单的智能体构建-CSDN博客&#xff0c;我介绍了编排创作智能体&#xff0c;这篇来介绍一下“决策节点”。 决策节点 在编排创作智能体中&…

MQTT.fx 1.7.1使用说明篇(OneNET-MQTT-API调试)

&#xff08;代码完美实现&#xff09;stm32 新版 onenet mqtt物联网(保姆级教程) &#xff08;代码完美实现&#xff09;stm32 新版 onenet mqtt物联网(保姆级教程)https://blog.csdn.net/Wang2869902214/article/details/142501323 MQTT.fx 1.7.1使用教程 下载地址 MQ…

巧用switch-case消除条件判断

shigen坚持更新文章的博客写手&#xff0c;记录成长&#xff0c;分享认知&#xff0c;留住感动。个人IP&#xff1a;shigen 在之前的文章中&#xff0c;我们有提交消除if-else代码的方法&#xff1a; 结合HashMap与Java 8的Function和Optional消除ifelse判断巧用枚举消除逻辑判…

一文上手SpringSecuirty【六】

自定义认证流程完成之后,前端收到了后端生成的token,那么在之后的所有请求当前,都必须携带token.作为服务器来说,得验证这个token,是否合法. 一、验证token是否合法 1.1 OncePerRequestFilter过滤器 OncePerRequestFilter是 Spring 框架中的一个过滤器&#xff0c;用于确保在…

抖音支付回调验签 go 版本

序言 最近在做抖音小程序支付&#xff0c;由于抖音开放平台的文档写的较为简陋&#xff0c;让人踩了不少坑&#xff0c;在这里整理一下做小程序支付的整个过程&#xff0c;以通用交易系统为例子。 准备条件 1&#xff09;申请小程序&#xff0c;开通支付功能 这里需要明确你小…

鸿蒙开发(NEXT/API 12)【硬件(传感器开发)】传感器服务

使用场景 Sensor Service Kit&#xff08;传感器服务&#xff09;使应用程序能够从传感器获取原始数据&#xff0c;并提供振感控制能力。 Sensor&#xff08;传感器&#xff09;模块是应用访问底层硬件传感器的一种设备抽象概念。开发者可根据传感器提供的相关接口订阅传感器…

Mitsuba 渲染基础

Mitsuba 渲染基础 0. Abstract1. 安装 Mitsuba21.1 下载 Mitsuba2 源码1.2 选择后端 (variants)1.3 编译 2. [Mitsuba2PointCloudRenderer](https://github.com/tolgabirdal/Mitsuba2PointCloudRenderer)2.1 Mitsuba2 渲染 XML2.2 Scene 场景的 XML 文件格式2.2.1 chair.npy to…

Comfyui 学习笔记2

在潜空间放大&#xff0c;三种方法&#xff1a;NNLatentUpscale、Upscale Latent、Upscale Latent&#xff0c;其中只有NNLatentUpscale自带模型优化&#xff0c;其他两种需要KSample重新绘画&#xff0c;NNLatentUpscale后也可以接KSmaple。 像素空间放大&#xff0c;同理&am…

大模型推理任务Nvidia GPU选型指南

大型语言模型 (LLM)&#xff08;如 GPT-4、BERT 和其他基于 Transformer 的模型&#xff09;彻底改变了 AI 格局。这些模型需要大量计算资源来进行训练和推理。选择合适的 GPU 进行 LLM 推理可以极大地影响性能、成本效益和可扩展性。 在本文中&#xff0c;我们将探索最适合 L…