c++初阶-----STL---vector

news2024/11/16 11:31:03

作者前言

🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂
​🎂 作者介绍: 🎂🎂
🎂 🎉🎉🎉🎉🎉🎉🎉 🎂
🎂作者id:老秦包你会, 🎂
简单介绍:🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂
喜欢学习C语言、C++和python等编程语言,是一位爱分享的博主,有兴趣的小可爱可以来互讨 🎂🎂🎂🎂🎂🎂🎂🎂
🎂个人主页::小小页面🎂
🎂gitee页面:秦大大🎂
🎂🎂🎂🎂🎂🎂🎂🎂
🎂 一个爱分享的小博主 欢迎小可爱们前来借鉴🎂


vector

  • **作者前言**
  • 初始vector
  • vector的使用
    • 构造函数
    • 成员函数
    • shrink_to_fit
  • vector没有的成员函数
    • find

初始vector

  1. vector是表示可变大小数组的序列容器
  2. 就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。
  3. 本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小,为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。就时间而言,这是一个相对代价高的任务,因为每当一个新的元素加入到容器的时候,vector并不会每次都重新分配大小。
  4. vector分配空间策略:vector会分配一些额外的空间以适应可能的增长,因为存储空间比实际需要的存储空间更大。不同的库采用不同的策略权衡空间的使用和重新分配。但是无论如何,重新分配都应该是对数增长的间隔大小,以至于在末尾插入一个元素的时候是在常数时间的复杂度完成的。
  5. 因此,vector占用了更多的存储空间,为了获得管理存储空间的能力,并且以一种有效的方式动态增长。
  6. 与其它动态序列容器相比(deque, list and forward_list), vector在访问元素的时候更加高效,在末尾添加和删除元素相对高效。对于其它不在末尾的删除和插入操作,效率更低。比起list和forward_list统一的迭代器和引用更好
  7. 简单来说就是一个顺序表

vector的使用

vector页面
在这里插入图片描述
我们需要先理解一下怎么定义一个vector对象,可以看出,这是一个类模板,我们知道可以使用typename也可以使用class来,
有类模板有两个参数,分别是类型参数 T和 模板参数Alloc,Alloc也就是allocator,我们都知道这些参数都是类型
所以,我们只要显示实例化一个类型就可以;

vector<int> sep;

vector就是sep对象的类型,

构造函数

在这里插入图片描述
需要注意一下:
value_type就是T, 例如,对于一个 std::vector,value_type 就是 int;对于一个 std::vector<std::string>,value_type 就是 std::string。
allocator_type就是Alloc
这些构造函数,allocator_type类型的参数都进行赋值了
所以可以进行的构造可以是

int main()
{
	vector<int> sep0;
	vector<int> sep1(5,10);
	for (auto e : sep1)
	{
		cout << "sep1:" << e << " ";
	}
	cout << endl;
	vector<int> sep2(sep1.begin(), sep1.end());
	for (auto e : sep2)
	{
		cout<<"sep2:" << e << " ";
	}
	cout << endl;
	vector<int> sep3(sep2);
	for (auto e : sep2)
	{
		cout << "sep3:" << e << " ";
	}
	cout << endl;
	return 0;
}

在这里插入图片描述

成员函数

跟前面的string的一样,有迭代器,有大小这些成员函数,
在这里插入图片描述
这些成员函数,这里就不多去些了,需要使用的时候可以去查查
迭代器的指向
在这里插入图片描述
在这里插入图片描述

还有一些是需要去介绍的
在这里插入图片描述

这里我就介绍一下resize,
我们和前面的string比较一下
string:
在这里插入图片描述
vector:
在这里插入图片描述


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

int main()
{

	vector<int> v(100,1);
	cout << v.size() << endl;
	cout << v.capacity() << endl;
	v.resize(10, 2);
	cout << v.size() << endl;
	cout << v.capacity() << endl;
	for (int e : v)
	{
		cout << e;
	}
	return 0;
}

在这里插入图片描述

resize的作用不仅仅是把容量扩大,更是填满全部的空间,如果扩大到的长度小于原来的长度就会缩小(指的是字符串长度,容量是不会缩小的),和reserve相比,reserve仅仅是把目前的空间扩大到指定的长度,如果小于原来的长度就不会缩小,

对比效果:
在这里插入图片描述
在这里插入图片描述
可以看到,一样的代码,但是效果是不一样的,
如果要缩小容量的话可以使用shrink_to_fit

shrink_to_fit

把容量扩大或者缩小到和当前填充的内容的大小一致

vector没有的成员函数

find

我们发现vector容器里面没有find这个成员函数,但是std::find有,我们可以去使用
在这里插入图片描述
这个函数是在std里面的

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

int main()
{
	vector<int> v;
	int i = 0;
	for (i = 0; i < 100; i++)
	{
		v.push_back(i);
	}
	auto pos = std::find(v.begin(), v.end(), 10);
	if (pos == v.end())
	{
		cout << "NO" << endl;
	}
	else
	{
		cout << "YES" << endl;
	}


	return 0;
}

在这里插入图片描述

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

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

相关文章

Git 版本控制:构建高效协作和开发流程的最佳实践

引言 版本控制是开发中不可或缺的一部分&#xff0c;他允许多人同时协作&#xff0c;通过记录每一次代码的变更&#xff0c;帮助开发者理解何时、为什么以及谁做了修改。这不仅有助于错误追踪和功能回溯&#xff0c;还使得团队能够并行工作&#xff0c;通过分支管理实现功能的…

计算机网络4——网络层2

文章目录 一、地址解析协议ARP二、IP数据报格式1、IP 数据报首部的固定部分中的各字段2、IP 数据报首部的可变部分 三、IP 层转发分组的过程1、流程2、案例分析3、最长前缀匹配4、分组转发算法5、使用二叉线索查找转发表 一、地址解析协议ARP 在实际应用中&#xff0c;我们经常…

FeignClient注入错误,IDemoClient that could not be found.

问题描述&#xff1a; 项目引入openFeign ,调用FeignClient提示&#xff1a; Field demoClient in com.demo2.controller.DemoController required a bean of type com.demo.feign.IDemoClient that could not be found. The injection point has the following annotations…

# 从浅入深 学习 SpringCloud 微服务架构(六)Feign(1)

从浅入深 学习 SpringCloud 微服务架构&#xff08;六&#xff09;Feign&#xff08;1&#xff09; 一、Feign 组件概述&#xff1a; Feign 是 Netflix 开发的声明式&#xff0c;模板化的HTTP客户端。 其灵感来自 Retrofit,JAXRS-2.0 以及 WebSocket。 Feign 可帮助我们更加…

Kotlin/Java HashMap异常:java.util.ConcurrentModificationException

Kotlin/Java HashMap异常&#xff1a;java.util.ConcurrentModificationException 一般在并行/多线程中发生&#xff0c;粗暴但比较简洁的解决方案是把线程不安全的HashMap换成线程安全的 ConcurrentHashMap Kotlin读写分离CopyOnWriteArrayList_kotlin copyonwritearraylist…

第27天:安全开发-PHP应用TP框架路由访问对象操作内置过滤绕过核心漏洞

第二十七天 一、TP框架-开发-路由访问&数据库&文件上传&MVC模型 1.TP框架-开发-配置架构&路由&MVC模型 参考&#xff1a;https://www.kancloud.cn/manual/thinkphp5_1 配置架构-导入使用路由访问-URL访问数据库操作-应用对象文件上传操作-应用对象前端页…

【注解和反射】类加载器

继上一篇博客【注解和反射】什么时候类会和不会被初始化&#xff1f;-CSDN博客 目录 六、类加载器 测试&#xff1a;获得类加载器 &#xff08;1&#xff09;如何获取Java中的类加载器及其父类加载器 &#xff08;2&#xff09;测试当前类是哪个类加载器 &#xff08;3&am…

深度学习-线性代数

目录 标量向量矩阵特殊矩阵特征向量和特征值 标量由只有一个元素的张量表示将向量视为标量值组成的列表通过张量的索引来访问任一元素访问张量的长度只有一个轴的张量&#xff0c;形状只有一个元素通过指定两个分量m和n来创建一个形状为mn的矩阵矩阵的转置对称矩阵的转置逻辑运…

hbase 集成 phoenix 实现 sql 化

1. 依赖 hbase > hbase 集群搭建 2. 下载安装包 点击下载 ps&#xff1a;该网页在内网可能打不开&#xff0c;遇到该情况有条件的可以打开 VPN 在下载 3. 上传解压 使用工具将安装包上传的服务器上 笔者这里选择 上传到 /opt/software 目录&#xff0c;解压到 /opt/mo…

[Algorithm][前缀和][和为K的子数组][和可被K整除的子数组][连续数组][矩阵区域和]详细讲解

目录 1.和为 K 的子数组1.题目链接2.算法原理详解3.代码实现 2.和可被 K 整除的子数组1.题目链接2.算法原理详解3.代码实现 3.连续数组1.题目链接2.算法原理详解3.代码实现 4.矩阵区域和1.题目链接2.算法原理详解3.代码实现 1.和为 K 的子数组 1.题目链接 和为 K 的子数组 2.…

目标检测——YOLOv7算法解读

论文&#xff1a;YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors (2022.7.6) 作者&#xff1a;Chien-Yao Wang, Alexey Bochkovskiy, Hong-Yuan Mark Liao 链接&#xff1a;https://arxiv.org/abs/2207.02696 代码&#xff1a;h…

十大排序算法详解-上篇:比较排序算法【python 动态图解】

作者介绍&#xff1a;10年大厂数据\经营分析经验&#xff0c;现任大厂数据部门负责人。 会一些的技术&#xff1a;数据分析、算法、SQL、大数据相关、python 欢迎加入社区&#xff1a;码上找工作 作者专栏每日更新&#xff1a; LeetCode解锁1000题: 打怪升级之旅 python数据分析…

如何通过cURL库实现远程控制插座

如何通过cURL库实现远程控制插座呢&#xff1f; 本文描述了使用cURL库调用HTTP接口&#xff0c;实现控制插座&#xff0c;即插即用&#xff0c;先插入插座&#xff0c;再接电器&#xff0c;实现远程控制。 可选用产品&#xff1a;可根据实际场景需求&#xff0c;选择对应的规格…

libtorrent - 安装小记

文章目录 官方文档&#xff1a;libtorrent python binding http://libtorrent.org/python_binding.html 1、下载代码 建议使用&#xff1a; git clone --recurse-submodules https://github.com/arvidn/libtorrent.git如果在 github web 界面下载代码&#xff0c;build 的时候…

进程动静态库

文章目录 动态库和静态库1. 静态库2. 动态库 承接上文&#xff1a; 文件描述符 动态库和静态库 静态库与动态库&#xff1a; 静态库&#xff08;.a&#xff09;&#xff1a;程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库动态库&#xf…

ISP比普通的静态代理相比有什么优势?

ISP&#xff08;Internet Service Provider&#xff09;&#xff0c;即互联网服务提供商&#xff0c;是向广大用户综合提供互联网接入业务、信息业务、增值业务的电信运营商。而静态代理则是一个固定不变的代理IP地址&#xff0c;具有稳定性强、兼容性好和管理方便等特点。当我…

上位机图像处理和嵌入式模块部署(树莓派4b之自动化测试)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 硬件、软件功能开发ok只是产品开发的第一步。怎么做到自动化测试、保证产品质量才是关键。很多时候&#xff0c;我们给客户提供了功能&#xff0c;…

适用于集成温度补偿晶体振荡器SG3225EEN

在现代电子系统中&#xff0c;随着技术的发展&#xff0c;对晶体振荡器的要求越来越高。例如&#xff0c;人工智能、5G等技术的应用需要更高的频率稳定度和更低的相位噪声&#xff0c;以确保数据传输的准确性和系统的高效运行。此外&#xff0c;随着电子设备向智能化、小型化发…

PHP+MYSQL多条件选一通用搜索系统功能单文件7KB

通用功能: 快速填写参数用于自己的mysql数据表搜索,ajax载入数据 <?php header("content-Type: text/html; charsetUTF-8"); //error_reporting(0);$dbhost "localhost"; //数据库地址本地localhost $dbuser "chalidecom"; //数据库账号 …

C语言扫雷游戏完整实现(下)

文章目录 前言一、排雷函数菜单二、排雷函数菜单的实现三、拓展棋盘功能四、源码1. test.c源文件2. game.h头文件3. game.c源文件 总结 前言 C语言实现扫雷游戏的排雷菜单&#xff0c;以及功能的实现&#xff0c;拓展棋盘功能&#xff0c;以及源码等。 上半部分的链接地址: C语…