秒懂C++之vector(上)

news2024/9/9 0:18:40

fe594ea5bf754ddbb223a54d8fb1e7bc.gif

目录

 

一.vector定义

二.vector常用接口

2.1 vector iterator迭代器

2.2 reserve 扩容

2.3 insert 插入

三.对象数组

3.1 例题

3.2 小拓展


一.vector定义

vector本质就是一个顺序表

#include <iostream>
#include <vector>
using namespace std;

void func(vector<int>& v)
{
	for (auto e : v)
	{
		cout << e << ' ';
	}
	cout << endl;
}

int main()
{
	vector<int> v1;
	func(v1);
	vector<int> v2(10,1);
	func(v2);
	vector<int> v3(v2);
	func(v3);
	vector<int> v4(v2.begin(),v2.end());
	func(v4);
	


	return 0;
}

相信大家在学完string类后很快就能上手vector。

二.vector常用接口

2.1 vector iterator迭代器

void fund(vector<int>& v)
{
	vector<int>::iterator it = v.begin();
	while (it != v.end())
	{
		cout << *it << ' ';
		++it;
	}
	cout << endl;
}

int main()
{
	
	vector<int> v1;
	fund(v1);
	vector<int> v2(10, 1);
	fund(v2);
	vector<int> v3(v2);
	fund(v3);
	vector<int> v4(v2.begin(), v2.end());
	fund(v4);
	


	return 0;
}

为什么没有流插入与流提取呢?因为在vector容器内不太需要,正常用迭代器就好了。

2.2 reserve 扩容

通过图例可以了解到vector的扩容也是1.5倍率的

void TestVectorExpandOP()
{
 vector<int> v;
 size_t sz = v.capacity();
 v.reserve(100); // 提前将容量设置好,可以避免一遍插入一遍扩容
 cout << "making bar 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';
 }
 }
}

如果能提前知道空间需求可以提前用reserve扩容,避免多次扩容。

 

这里顺带介绍一下shrink_to_fit的特点,它会缩容缩到数据大小为止~

2.3 insert 插入

void fund(vector<int>& v)
{
	vector<int>::iterator it = v.begin();
	while (it != v.end())
	{
		cout << *it << ' ';
		++it;
	}
	cout << endl;
}


int main()
{
	vector<int> v2(10, 1);
	v2.insert(v2.begin(), 2);
	fund(v2);

	vector<int> v3;
	v3.push_back(1);
	v3.push_back(2);
	v3.push_back(3);
	v3.push_back(4);
	v3.push_back(5);
	vector<int>::iterator it1 = find(v3.begin(), v3.end(), 3);//返回数字3下标
	v3.insert(it1, 2);//在目标下标插入2
	fund(v3);

	return 0;
}

vecotr的Insert插入有点和string类不一样,插入的位置要求用迭代iterator,还有一点就是里面的find接口不是vector写的,而是std库里自带的模板。

若find找不到下标会返回边界值,这里v3的边界值为5.

三.对象数组

这里我们用一道例题来解释~

3.1 例题

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

如果是c语言那么我们得用到二维数组来帮助我们解决问题,那么在c++呢?

我们用的是<vector<vector<int>>

我们正常用vector<int>实际含义为在vector对象中有一个指针_a,它会指向一处空间,而在这空间中存放的数都为整型,所以反推出_a指针类型为Int*

同理分析vector<vector<int>>对象中有一个指针_a,它指向一处空间,但是在这处空间中存放了多个vector<int>类型的对象,而在每个对象里又有一个整型指针指向蓝色空间~所以反推出最开始对象的_a指针类型为vector<int>*。

所以在c++中我们也有类似二维数组的使用方法。

class Solution {
public:
    vector<vector<int>> generate(int numRows) {
        vector<vector<int>> v;
        v.resize(numRows);//开辟能存放5个vector对象的空间
        for(size_t i = 0;i<numRows;i++)
        {
            v[i].resize(i+1,0);//遍历到对象时,对对象里面的数开辟空间并初始化
            //v[i].begin() = v[i].end = 1;
            v[i].front() = v[i].back() = 1;//根据题意对首尾数据置1
        }
        for(size_t i = 0;i<v.size();i++)//外层循环,遍历每一个vector对象
        {
             for(size_t j = 0;j<v[i].size();j++)//内层循环,遍历每一个vector对象里的数组
             {
                
                if(v[i][j]==0)
                {
                    v[i][j] = v[i-1][j-1]+v[i-1][j];
                }
             }
        }
        return v;
    }
};

v.size()是返回vector对象的个数,而v[i].size()是返回在每个对象中里面数组的数字个数

v[i][j]本质是v.operator[](i).operator[](j),连续调用了两次【】接口。而且该接口可以设置为内联,这样可以避免多次调用。

3.2 小拓展

我们创建一个类型为string的vector对象。然后通过单参隐式类型转换添加数据,而我们要讲的是vstr[0][0]中第一个[ ]指的是去访问3个string对象中的第0个string,返回的是vector。而后面的[ ]是调用string类的[ ] 去访问string类型的字符串,最后返回的类型是string。

两字符一结合后编译器通过查询编码表得出熊这个汉字~

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

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

相关文章

分布式:RocketMQ/Kafka总结(附下载链接)

文章目录 下载链接思维导图 本文总结的是关于消息队列的常见知识总结。消息队列和分布式系统息息相关&#xff0c;因此这里就将消息队列放到分布式中一并进行处理关联 下载链接 链接: https://pan.baidu.com/s/1hRTh7rSesikisgRUO2GBpA?pwdutgp 提取码: utgp 思维导图

大模型微调:参数高效微调(PEFT)方法总结

PEFT (Parameter-Efficient Fine-Tuning) 参数高效微调是一种针对大模型微调的技术&#xff0c;旨在减少微调过程中需要调整的参数量&#xff0c;同时保持或提高模型的性能。 以LORA、Adapter Tuning 和 Prompt Tuning 为主的PEFT方法总结如下 LORA 论文题目&#xff1a;LORA:…

TikTok达人合作:AI与大数据如何提升跨境电商营销效果

在当今数字时代&#xff0c;跨境电商与TikTok达人的合作已成为推动品牌增长和市场拓展的重要力量。随着AI、大数据等先进技术的不断发展和应用&#xff0c;这种合作模式正变得更加高效和精准。本文Nox聚星将和大家探讨在TikTok达人合作中&#xff0c;AI、大数据等技术的具体运用…

PyTorch 的 .pt 文件是什么?以及都能存储什么样的数据格式和复合数据格式?加载 train.pt 文件的一个代码示例

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、PyTorch 的 .pt 文件是什么&#xff1f; .pt 文件的基本概念&#xff1a; .pt 文件是 PyTorch 中特有的一种文件格式&#xff0c;用于保存和加载各类数据。.pt为 PyTorch 的缩写。此文件格式极其灵…

Linux快速安装Jenkins一键部署Maven项目

目录 一、序言二、安装前置准备1、JDK版本要求2、Maven安装3、Git安装 三、Jenkins安装1、Jenkins war包下载2、启动Jenkins3、初始化Jenkins4、Jenkins全局设置 四、Maven项目自动化jar部署项目配置1、创建Maven风格的项目2、丢弃旧的构建3、源码管理配置4、构建配置5、构建后…

华为od 100问 持续分享10-华为OD的面试流程细说

我是一名软件开发培训机构老师&#xff0c;我的学生已经有上百人通过了华为OD机试&#xff0c;学生们每次考完试&#xff0c;会把题目拿出来一起交流分享。 重要&#xff1a;2024年5月份开始&#xff0c;考的都是OD统一考试&#xff08;D卷&#xff09;&#xff0c;题库已经整…

带有扰动观测器的MPC电机控制

模型预测控制(Model Predictive Contro1, MPC)是一种先进的控制策略&#xff0c;虽然具有鲁棒性、建模简单、处理多变量系统、显示约束、预测未来行为和优化性能的能力等优势。它的不足在于预测控制行为的计算需要繁琐的计算量&#xff0c;以及抗干扰能力较弱。这里提出基于扰动…

34 列表常用方法——copy()

列表对象的 copy() 方法返回列表的浅复制。 浅复制&#xff0c;是指生成一个新的列表&#xff0c;并且把原列表中所有元素的引用都都复制到新列表中。 如果原列表中只包含整数、实数、复数等基本类型或元组、字符串这样的不可变类型的数据&#xff0c;一般是没有问题的。但是&a…

黛米·摩尔和她的孙女卢埃塔在这张飘逸的快照很亲密

卢埃塔和她的祖母黛米摩尔显然是最好的朋友&#xff0c;这张飘逸的快照证明了这一点。准备好“哇&#xff01;” 7 月 26 日&#xff0c;摩尔分享了一张非常迷人的照片&#xff0c;照片上有她、她的两个女儿和她的孙女在她昂贵的后院。她在照片中配文说&#xff1a;“夏日&…

SX_初识GitLab_1

1、对GitLab的理解&#xff1a; 目前对GitLab的理解是其本质是一个远程代码托管平台&#xff0c;上面托管多个项目&#xff0c;每个项目都有一个master主分支和若干其他分支&#xff0c;远程代码能下载到本机&#xff0c;本机代码也能上传到远程平台 1.分支的作用&#xff1a…

Home Assistant ESPHome 第一次烧录ESP8266设备记录日志

流程简介 windows PC->usb 数据线->板载usb-ttl->esp8266 connect 编译固件 下载固件 esp web tools 写入固件 编译固件 go esphome add on 1.创建设备 选择ESP8266 2.编写.yaml配置, 3.编译-输出bin 烧录 4.烧录 打开 Web-ESPHome 5.查看日志 查看手机wif…

如何让企业在获客上拥有竞争力?云微客打造流量爆款

做了这么久的短视频&#xff0c;还是没有客户&#xff0c;如果你还在单一账号上死磕&#xff0c;那么就别做爆款的白日梦了&#xff01;因为你的做法是干不过同行的&#xff0c;同行可能早就开通上百个账号在互联网上抢流量了。 想获客只用一个云微客AI矩阵系统&#xff0c;不用…

科普文:深入理解ElasticSearch体系结构

概叙 Elasticsearch是什么&#xff1f; Elasticsearch&#xff08;简称ES&#xff09;是一个分布式、可扩展、实时的搜索与数据分析引擎。ES不仅仅只是全文搜索&#xff0c;还支持结构化搜索、数据分析、复杂的语言处理、地理位置和对象间关联关系等。 官网地址&#xff1a;…

实习日志2之windows上大模型(qwen2-7b)部署

一、模型部署 1、下载ollama(大模型本地部署工具)&#xff0c;并安装 下载网址&#xff1a;https://ollama.com/ ollama是大模型部署方案&#xff0c;对应docker&#xff0c;本质也是基于docker的容器化技术。 2、下载大模型 在命令框&#xff0c;如windows系统在cmd窗口输…

汽车、能源、烟草、电力行业洞见:TDengine 用户大会亮点荟萃

近年来&#xff0c;随着物联网、车联网、工业互联网等前沿技术的迅猛发展&#xff0c;全球数据量呈指数级增长。作为大数据的一个重要组成部分&#xff0c;时序数据因其在实时监控、预测分析和智能决策中的独特优势&#xff0c;正逐步成为数字化转型的关键要素。尤其在 AI 时代…

如何使用Firefox浏览器连接IPXProxy设置海外代理IP教程

​Firefox浏览器是大家上网时经常会使用的一款工具。不过&#xff0c;有时候我们会遇到一些网站无法直接访问的情况。这时候&#xff0c;通过海外代理IP&#xff0c;比如像IPXProxy代理这样的服务&#xff0c;可能就能帮助我们进入那些受限制的网站&#xff0c;获取我们所需的资…

如何通过 CloudCanal 实现从 Kafka 到 AutoMQ 的数据迁移

01 引言 随着大数据技术的飞速发展&#xff0c;Apache Kafka 作为一种高吞吐量、低延迟的分布式消息系统&#xff0c;已经成为企业实时数据处理的核心组件。然而&#xff0c;随着业务的扩展和技术的发展&#xff0c;企业面临着不断增加的存储成本和运维复杂性问题。为了更好地…

Discourse 如何通过终端工具访问 PGSQL

PGSQL 在 Discourse 中是通过容器方式运行的&#xff0c;要访问 PGSQL 中的数据那么首先需要进入到容器后才可以。 进入容器的命令为&#xff1a; cd /var/discourse/./launcher enter appsu discoursepsql discourse最后的命令是登录到运行在容器中的 pgsql。 查看 pgsql 上…

CTFshow--Web--代码审计

目录 web301 web302 web303 web304 web305 web306 web307 web308 web309 web310 web301 开始一个登录框, 下意识sql尝试一下 发现 1 的时候会到一个 checklogin.php 的路径下, 但啥也没有 好吧, 这是要审计代码的 ,下载好源码, 开始审计 看了一下源码 , 应该就是sql…

thinkPHP开发的彩漂网站源码,含pc端和手机端

源码简介 后台thinkPHP架构,页面程序双分离,Mysql数据库严谨数据结构、多重数据审核机制、出票机制和监控机制,html5前端技术适用移动端,后台逻辑更多以server接口可快捷实现对接pc和ap,下载会有少量图片素材丢失,附件有下载说明前端demo账户密码和后台管理地址管理员账户密码…