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中与迭代器相关的函数,模板参数T为int类型。 主要参考 cpluscplus.com 侯…...
阿里云CPU超载解决记录
现象:阿里云CPU使用率超90%连续5分钟告警,项目日志error.log中存在heap/gc/limit等内存耗尽等信息,阿里云慢查询日志每日有查询时间很长的参数一直不变的慢sql,linux服务器使用top命令并按c可以看到cpu过大是哪个命令行造成的 分…...

【工具变量】上市公司企业商业信用融资数据(2003-2022年)
一、测算方式:参考《会计研究》张新民老师的做法 净商业信用NTC(应付账款应付票据预收账款)-(应收账款应收票据预付账款),用总资产标准化; 应付账款AP应付账款应付票据预收账款,用总资产标准化 一年以上应付账款比例LAP是企业一年以上(包括一…...

2024数字科技生态大会 | 紫光展锐携手中国电信助力数字科技高质量发展
2024年12月3日至5日,中国电信2024数字科技生态大会在广州举行,通过主题峰会、多场分论坛、重要签约及合作发布等环节,与合作伙伴共绘数字科技发展新愿景。紫光展锐作为中国电信的战略合作伙伴受邀参会,全面呈现了技术、产品创新进…...
ES语法(一)概括
一、语法 1、请求方式 Elasticsearch(ES)使用基于 JSON 的查询 DSL(领域特定语言)来与数据交互。 一个 ElasticSearch 请求和任何 HTTP 请求一样由若干相同的部件组成: curl -X<VERB> <PROTOCOL>://&l…...

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

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

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

【密码学】分组密码的工作模式
1.电码本模式(ECB) 优点: 每个数据块独立加密,可并行加密,实现简单。 缺点: 相同明文会产生相同密文,不具备数据完整保护性。 适用于短消息的加密传输 (如一个加密密钥)。 工作流程:用相同的密钥分别对…...
SQL 和 NoSQL 有什么区别?
SQL(Structured Query Language,结构化查询语言)和NoSQL数据库是两种不同类型的数据库管理系统,它们在多个方面存在显著的区别。以下是对SQL和NoSQL主要区别的详细分析: 一、数据存储与模型 SQL数据库 使用关系模型来…...

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

Harnessing Large Language Models for Training-free Video Anomaly Detection
标题:利用大型语言模型实现无训练的视频异常检测 原文链接:https://openaccess.thecvf.com/content/CVPR2024/papers/Zanella_Harnessing_Large_Language_Models_for_Training-free_Video_Anomaly_Detection_CVPR_2024_paper.pdf 源码链接:ht…...

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

HDR视频技术之六:色调映射
图像显示技术的最终目的就是使得显示的图像效果尽量接近人们在自然界中观察到的对应的场景。 HDR 图像与视频有着更高的亮度、更深的位深、更广的色域,因此它无法在常见的普通显示器上显示。 入门级的显示器与播放设备(例如普通人家使用的电视࿰…...
(洛谷题目)P11060 【MX-X4-T0】「Jason-1」x!
思路: 理解问题:首先,我们要理解题目的要求,即判断一个非负整数n的阶乘n!是否是n1的倍数。 阶乘的定义:根据阶乘的定义,n!是所有小于等于n的正整数的乘积。特别地,0!被定义为1。 特殊情况处理…...

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

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

AWS 机器学习,推动 AI 技术的健康发展
目录 一、AI 正在改变生产方式二、从炒作走向务实1、选对场景2、重视数据3、产品思维4、持续优化 三、人才是最稀缺的资源四、负责任的 AI 开发五、未来已来六、启示与思考七、结语 如果说传统软件开发是手工作坊,那么 AI 就像工业革命带来的机器生产。 在最新的一…...
MCPTT 与BTC
MCPTT(Mission Critical Push-to-Talk)和B-TrunC(宽带集群)是两种关键通信标准,它们分别由不同的组织制定和推广。 MCPTT(Mission Critical Push-to-Talk)标准由3GPP(第三代合作伙伴…...
Jackson - JsonGenerator创建JSON、JsonParser解析JSON
以下是关于如何使用Jackson的JsonGenerator类来创建JSON内容以及如何使用JsonParser类来读取JSON内容的教程。 依赖项 首先,在pom.xml文件中添加以下依赖项以引入Jackson库: <dependency><groupId>com.fasterxml.jackson.core</groupI…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...

【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

elementUI点击浏览table所选行数据查看文档
项目场景: table按照要求特定的数据变成按钮可以点击 解决方案: <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...
SpringAI实战:ChatModel智能对话全解
一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM࿰…...