当前位置: 首页 > 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…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...

Vue ③-生命周期 || 脚手架

生命周期 思考&#xff1a;什么时候可以发送初始化渲染请求&#xff1f;&#xff08;越早越好&#xff09; 什么时候可以开始操作dom&#xff1f;&#xff08;至少dom得渲染出来&#xff09; Vue生命周期&#xff1a; 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...

Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合

作者&#xff1a;来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布&#xff0c;Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明&#xff0c;Elastic 作为 …...