当前位置: 首页 > news >正文

C++STL容器vector容器大小相关函数

目录

前言

主要参考

vector::size

vector::max_size

vector::resize

vector::capacity

vector::empty

vector::reserve

vector::shrink_to_fit

共勉


前言

        本文将讨论STL容器vector中与迭代器相关的函数,模板参数T为int类型。

主要参考

        cpluscplus.com

        侯捷《STL源码剖析》

        通义

vector::size

size_type size();

参数:

返回值: 返回vector中的元素数量, 返回一个无符号整型

功能: 

  • 返回vector中的元素数量。
  • 这是vector中实际持有的对象数量,这并不一定等于其存储容量。

案例

#include <iostream>
#include <vector>int main()
{std::cout << std::endl;std::vector<int> myints;std::cout << "0. size: " << myints.size() << '\n';// 向向量中添加 10 个元素,从 0 到 9for (int i = 0; i < 10; i++){myints.push_back(i);}std::cout << "1. size: " << myints.size() << '\n';// 在向量末尾插入 10 个值为 100 的元素myints.insert(myints.end(), 10, 100);std::cout << "2. size: " << myints.size() << '\n';// 移除向量的最后一个元素myints.pop_back();std::cout << "3. size: " << myints.size() << '\n';std::cout << std::endl;std::cout << std::endl;return 0;
}

运行结果

vector::max_size

size_type max_size();

参数:

返回值: vector可以包含的最大的元素数. (返回一个无符号整型)

功能: 

  • 返回向量可以容纳的最大元素数。
  • 这是由于已知系统或库实现限制而达到的容器的最大潜在大小,但容器绝不是保证能够达到该大小:在到达该大小之前仍有可能无法分配存储。

案例

#include <iostream>
#include <vector>int main()
{std::cout << std::endl;std::vector<int> myvector;// set some content in the vector:for (int i = 0; i < 100; i++)myvector.push_back(i);std::cout << "size: " << myvector.size() << "\n";std::cout << "max_size: " << myvector.max_size() << "\n";std::cout << std::endl;return 0;
}

运行结果

vector::resize

void resize (size_type n)

void resize (size_type n, const value_type& val)

参数:

  • n为新容器的大小, 以元素数量表示. 一个无符号整型
  • val如果n大于当前容器大小,对象的内容被复制到添加的元素中。如果没有指定,则使用默认构造函数代替。

返回值: 无返回值

功能: 

  • 将容器调整可以包含n个元素的大小。
  • 如果n小于当前容器大小,则内容减少到其前n个元素,删除超出的(并销毁它们)。
  • 如果n大于当前容器大小,则通过在末尾插入所需数量的元素来扩展内容,直到达到n的大小。
  • 如果val指定,则新元素作为val的副本初始化,否则,它们被值初始化。
  • 如果n也大于当前容器容量,则自动重新分配已分配存储空间。请注意,此函数通过从容器中插入或删除元素而更改实际的内容。

案例

#include <iostream>
#include <vector>int main()
{std::cout << '\n';std::vector<int> myvector;// set some initial content:for (int i = 1; i < 10; i++){myvector.push_back(i);}std::cout << "myvector中初始内容: ";for (int i = 0; i < myvector.size(); i++){std::cout << ' ' << myvector[i];}std::cout << '\n';std::cout << '\n';myvector.resize(5);std::cout << "将myvector大小设置为5时: ";for (int i = 0; i < myvector.size(); i++){std::cout << ' ' << myvector[i];}std::cout << '\n';std::cout << '\n';myvector.resize(8, 100);std::cout << "将myvector大小设置为8, 并将大于原本空间的位置设置为100时: ";for (int i = 0; i < myvector.size(); i++){std::cout << ' ' << myvector[i];}std::cout << '\n';std::cout << '\n';myvector.resize(12);std::cout << "将myvector大小扩大为12时: ";for (int i = 0; i < myvector.size(); i++){std::cout << ' ' << myvector[i];}std::cout << '\n';std::cout << '\n';return 0;
}

运行结果

vector::capacity

size_type capacity();

参数:

返回值: 

        向量中当前分配的存储容量大小,以它能容纳的元素个数为单位。 (返回一个无符号整型)

功能: 

  • 返回为向量分配的存储空间大小,以元素为单位表示。
  • 此容量不一定等于向量大小。它可以相等或更大,并且额外的空间允许在插入时无需重新分配即可容纳增长。
  • 请注意,该容量并不意味着对向量大小的限制。当此容量用尽并且需要更多时,
  • 容器会自动扩展(重新分配其存储空间)。向量的最大尺寸由成员max_size给出理论上的上限。

案例

#include <iostream>
#include <vector>int main ()
{std::vector<int> myvector;// 向myvector中插入5个元素:for (int i=0; i<5; i++) myvector.push_back(i);std::cout << "size: " << (int) myvector.size() << '\n';std::cout << "capacity: " << (int) myvector.capacity() << '\n';return 0;
}

运行结果

        这里可以看出当前myvector对象的大小是小于容器大小的, 因为容器在自动扩容的时候, 为了预防频繁多次扩容, 会一次性扩容较大的值, 不同的环境扩容大小可能会不一样. 所以capacity的值可能会有变化.

vector::empty

bool empty();

参数:
返回值: 如果容器大小为零,则为真,否则为假。(返回一个bool值)

功能: 测试向量是否为空
案例

#include <iostream>
#include <vector>int main()
{std::cout << '\n';std::vector<int> myvector;int sum(0);for (int i = 1; i <= 10; i++)myvector.push_back(i);// 当myvector容器为空的时候跳出循环while (!myvector.empty()){sum += myvector.back();myvector.pop_back();}std::cout << "total: " << sum << '\n';std::cout << '\n';return 0;
}

运行结果

        该示例将myvector的内容初始化为数字序列(从1到10)。然后逐个弹出元素,直到为空,并计算其和。

vector::reserve

void reserve (size_type n);

参数:

        n为向量的最小容量。 结果向量的容量可能等于或大于n。

        size_type是一个无符号整数类型。

返回值: 无返回值

功能: 

  • 请求更改容量 要求向量容量至少足以包含n个元素。
  • 如果n大于当前vector容量,该函数将容器重新分配其存储并增加其vector到n(或更大)。在所有其他情况下,函数调用不会导致重新分配,并且vector容量不受影响。 此功能对vector大小没有影响,也不能改变其元素。

案例

#include <iostream>
#include <vector>int main()
{std::cout << '\n';std::vector<int>::size_type sz;std::vector<int> v1;sz = v1.capacity();std::cout << "让v1扩容:\n";for (int i = 0; i < 100; ++i){v1.push_back(i);if (sz != v1.capacity()){sz = v1.capacity();std::cout << "capacity 改变: " << sz << '\n';}}std::vector<int> v2;sz = v2.capacity();v2.reserve(100); // this is the only difference with v1 abovestd::cout << "让v2扩容:\n";for (int i = 0; i < 100; ++i){v2.push_back(i);if (sz != v2.capacity()){sz = v2.capacity();std::cout << "capacity 改变: " << sz << '\n';}}std::cout << '\n';return 0;
}

运行结果

vector::shrink_to_fit

void shrink_to_fit();

参数: 

返回值:

功能:

        将容器容量缩小到合适大小,这可能会导致重新分配,但不会影响容器内容大小,并且不能更改其元素。

案例:

int main()
{std::cout << '\n';std::vector<int> myvector(100);std::cout << "容器初始容量大小: " << myvector.capacity() << '\n';std::cout << "容器初始大小: " << myvector.size() << '\n';std::cout << '\n';myvector.resize(10);std::cout << "重新设置后的容量大小: " << myvector.capacity() << '\n';std::cout << "重新设置后的容器大小: " << myvector.size() << '\n';std::cout << '\n';myvector.shrink_to_fit();std::cout << "调整之后的容器容量大小" << myvector.capacity() << '\n';std::cout << "调整后的容器大小: " << myvector.size() << '\n';std::cout << '\n';return 0;
}

运行结果

共勉

        希望本文能给你带来帮助,如果有什么问题或疑问欢迎评论区和私信讨论。谢谢点赞、收藏、关注。

感谢阅读

相关文章:

C++STL容器vector容器大小相关函数

目录 前言 主要参考 vector::size vector::max_size vector::resize vector::capacity vector::empty vector::reserve vector::shrink_to_fit 共勉 前言 本文将讨论STL容器vector中与迭代器相关的函数&#xff0c;模板参数T为int类型。 主要参考 cpluscplus.com 侯…...

阿里云CPU超载解决记录

现象&#xff1a;阿里云CPU使用率超90%连续5分钟告警&#xff0c;项目日志error.log中存在heap/gc/limit等内存耗尽等信息&#xff0c;阿里云慢查询日志每日有查询时间很长的参数一直不变的慢sql&#xff0c;linux服务器使用top命令并按c可以看到cpu过大是哪个命令行造成的 分…...

【工具变量】上市公司企业商业信用融资数据(2003-2022年)

一、测算方式&#xff1a;参考《会计研究》张新民老师的做法 净商业信用NTC(应付账款应付票据预收账款)-(应收账款应收票据预付账款)&#xff0c;用总资产标准化; 应付账款AP应付账款应付票据预收账款&#xff0c;用总资产标准化 一年以上应付账款比例LAP是企业一年以上(包括一…...

2024数字科技生态大会 | 紫光展锐携手中国电信助力数字科技高质量发展

2024年12月3日至5日&#xff0c;中国电信2024数字科技生态大会在广州举行&#xff0c;通过主题峰会、多场分论坛、重要签约及合作发布等环节&#xff0c;与合作伙伴共绘数字科技发展新愿景。紫光展锐作为中国电信的战略合作伙伴受邀参会&#xff0c;全面呈现了技术、产品创新进…...

ES语法(一)概括

一、语法 1、请求方式 Elasticsearch&#xff08;ES&#xff09;使用基于 JSON 的查询 DSL&#xff08;领域特定语言&#xff09;来与数据交互。 一个 ElasticSearch 请求和任何 HTTP 请求一样由若干相同的部件组成&#xff1a; curl -X<VERB> <PROTOCOL>://&l…...

(vue)el-cascader多选级联选择器,值取最后一级的数据

(vue)el-cascader多选级联选择器&#xff0c;取值取最后一级的数据 获取到&#xff1a;[“养殖区”,“鸡棚”,“E5001”] 期望&#xff1a;[“E5001”] 问题: 解决方法 增加change事件方法&#xff0c;处理选中的value值 1.单选 <el-cascaderv-model"tags2":o…...

友思特方案 | 精密制程的光影贴合:半导体制造中的高功率紫外光源

导读 为新能源锂电行业赋能第四站&#xff1a;半导体制造中的高功率紫外光源&#xff01;稳定输出、灵活控制的曝光设备是新能源/半导体行业高端生产中减少误差、提高效率的核心技术&#xff0c;友思特 ALE 系列 UV LED 紫外光源集合6大优势&#xff0c;为精密制造的健康发展提…...

README写作技巧

做一个项目&#xff0c;首先第一眼看上去要美观&#xff0c;这样才有看下去的动力。做项目亦是如此&#xff0c;如果每一步应付做的话&#xff0c;我想动力也不会太大&#xff0c;最终很大概率会放弃或者进度缓慢。 1.README组成 README是对项目的一个说明&#xff0c;它对观看…...

【密码学】分组密码的工作模式

1.电码本模式&#xff08;ECB&#xff09; 优点: 每个数据块独立加密&#xff0c;可并行加密&#xff0c;实现简单。 缺点: 相同明文会产生相同密文&#xff0c;不具备数据完整保护性。 适用于短消息的加密传输 (如一个加密密钥)。 工作流程&#xff1a;用相同的密钥分别对…...

SQL 和 NoSQL 有什么区别?

SQL&#xff08;Structured Query Language&#xff0c;结构化查询语言&#xff09;和NoSQL数据库是两种不同类型的数据库管理系统&#xff0c;它们在多个方面存在显著的区别。以下是对SQL和NoSQL主要区别的详细分析&#xff1a; 一、数据存储与模型 SQL数据库 使用关系模型来…...

提升网站流量的关键:AI在SEO关键词优化中的应用

内容概要 在当今数字时代&#xff0c;提升网站流量已成为每个网站管理员的首要任务。而人工智能的技术进步&#xff0c;为搜索引擎优化&#xff08;SEO&#xff09;提供了强有力的支持&#xff0c;尤其是在关键词优化方面。关键词是连接用户需求与网站内容的桥梁&#xff0c;其…...

Harnessing Large Language Models for Training-free Video Anomaly Detection

标题&#xff1a;利用大型语言模型实现无训练的视频异常检测 原文链接&#xff1a;https://openaccess.thecvf.com/content/CVPR2024/papers/Zanella_Harnessing_Large_Language_Models_for_Training-free_Video_Anomaly_Detection_CVPR_2024_paper.pdf 源码链接&#xff1a;ht…...

如何通过自学成长为一名后端开发工程师?

大家好&#xff0c;我是袁庭新。最近&#xff0c;有星友向我提出了一个很好的问题&#xff1a;如何通过自学成为一名后端开发工程师&#xff1f; 为了解答这个疑问&#xff0c;我特意制作了一个视频来详细分享我的看法和建议。 戳链接&#xff1a;如何通过自学成长为一名后端开…...

HDR视频技术之六:色调映射

图像显示技术的最终目的就是使得显示的图像效果尽量接近人们在自然界中观察到的对应的场景。 HDR 图像与视频有着更高的亮度、更深的位深、更广的色域&#xff0c;因此它无法在常见的普通显示器上显示。 入门级的显示器与播放设备&#xff08;例如普通人家使用的电视&#xff0…...

(洛谷题目)P11060 【MX-X4-T0】「Jason-1」x!

思路&#xff1a; 理解问题&#xff1a;首先&#xff0c;我们要理解题目的要求&#xff0c;即判断一个非负整数n的阶乘n!是否是n1的倍数。 阶乘的定义&#xff1a;根据阶乘的定义&#xff0c;n!是所有小于等于n的正整数的乘积。特别地&#xff0c;0!被定义为1。 特殊情况处理…...

TEXT2SQL工具vanna本地化安装和应用

TEXT2SQL工具vanna本地化安装和应用 Vanna和Text2SQL环境安装和数据准备 conda虚拟环境安装数据准备ollama环境准备 ollama安装和运行ollama下载模型测试下API方式正常使用 chromaDB的默认的embedding模型准备 vanna脚本跑起来 Vanna和Text2SQL TEXT2SQL即文本转SQL&#xf…...

Bloom 效果

1、Bloom 效果是什么 Bloom效果&#xff08;中文也可以叫做高光溢出效果&#xff09;&#xff0c;是一种使画面中亮度较高的区域产生一种光晕或发光效果的图像处理技术&#xff0c;Bloom效果的主要目的是模拟现实世界中强光源在相机镜头或人眼中造成的散射和反射现象&#xff…...

AWS 机器学习,推动 AI 技术的健康发展

目录 一、AI 正在改变生产方式二、从炒作走向务实1、选对场景2、重视数据3、产品思维4、持续优化 三、人才是最稀缺的资源四、负责任的 AI 开发五、未来已来六、启示与思考七、结语 如果说传统软件开发是手工作坊&#xff0c;那么 AI 就像工业革命带来的机器生产。 在最新的一…...

MCPTT 与BTC

MCPTT&#xff08;Mission Critical Push-to-Talk&#xff09;和B-TrunC&#xff08;宽带集群&#xff09;是两种关键通信标准&#xff0c;它们分别由不同的组织制定和推广。 MCPTT&#xff08;Mission Critical Push-to-Talk&#xff09;标准由3GPP&#xff08;第三代合作伙伴…...

Jackson - JsonGenerator创建JSON、JsonParser解析JSON

以下是关于如何使用Jackson的JsonGenerator类来创建JSON内容以及如何使用JsonParser类来读取JSON内容的教程。 依赖项 首先&#xff0c;在pom.xml文件中添加以下依赖项以引入Jackson库&#xff1a; <dependency><groupId>com.fasterxml.jackson.core</groupI…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南&#xff1a;计算机基础与源码原理深度解析 第一轮提问&#xff1a;基础概念问题 1. 请解释什么是进程和线程的区别&#xff1f; 面试官&#xff1a;进程是程序的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff1b;而线程是进程中的…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...