【C++】STL——vector的有关空间的函数介绍和使用、size和capacity函数、resize和reserve函数

文章目录

  • 1.vector的使用
  • 2.vector空间增长问题
    • (1)size 获取数据个数
    • (2)capacity 获取容量大小
    • (3)empty 判断是否为空
    • (4)resize 改变vector的size
    • (5)reserve 改变vector的capacity

1.vector的使用

  vector和含义、vector构造函数、vector迭代器

  vector完整介绍

2.vector空间增长问题

在这里插入图片描述

(1)size 获取数据个数

  size()函数用于返回容器中元素的个数。

  下面是一个使用std::vector的size()函数的例子:

#include <iostream>
#include <vector>int main() {std::vector<int> numbers; // 创建一个int类型的vector容器numbers.push_back(10); // 向容器中添加元素numbers.push_back(20);numbers.push_back(30);numbers.push_back(40);std::cout << "容器中元素的个数为:" << numbers.size() << std::endl;return 0;
}//容器中元素的个数为:4

(2)capacity 获取容量大小

  vector容器的capacity()函数用于返回当前容器的容量,即底层数组能够容纳的最大元素数量。

  下面是一个使用std::vector的capacity()函数的例子:

#include <iostream>
#include <vector>int main() {std::vector<int> numbers; // 创建一个int类型的vector容器std::cout << "初始容器的容量为:" << numbers.capacity() << std::endl;numbers.push_back(10); // 向容器中添加元素numbers.push_back(20);numbers.push_back(30);numbers.push_back(40);std::cout << "添加四个元素后的容器的容量为:" << numbers.capacity() << std::endl;return 0;
}//初始容器的容量为:0
//添加四个元素后的容器的容量为:4

  size()和capacity()有不同的地方:

  size()函数用于返回容器中当前存储的元素数量,即容器中的实际元素个数。

  capacity()函数用于返回容器底层实际分配的存储空间大小,即容器能够容纳的最大元素数量。
  

(3)empty 判断是否为空

  empty()函数用于检查vector容器是否为空,即是否没有任何元素。它返回一个布尔值,true表示容器为空,false表示容器非空。

  下面是一个使用empty()函数的例子:

#include <iostream>
#include <vector>int main() {std::vector<int> numbers; // 创建一个int类型的vector容器if (numbers.empty()) {std::cout << "容器为空" << std::endl;} else {std::cout << "容器非空" << std::endl;}numbers.push_back(10); // 向容器中添加元素if (numbers.empty()) {std::cout << "容器为空" << std::endl;} else {std::cout << "容器非空" << std::endl;}return 0;
}//容器为空
//容器非空

(4)resize 改变vector的size

  resize()函数用于更改vector容器的大小,以容纳指定数量的元素。 当新的大小大于当前大小时,额外的元素将被默认构造或复制构造。当新的大小小于当前大小时,超出新大小的元素将会被删除。

  下面是一个使用resize()函数的例子:

#include <iostream>
#include <vector>int main() {std::vector<int> numbers; // 创建一个int类型的vector容器numbers.push_back(10); // 向容器中添加元素numbers.push_back(20);numbers.push_back(30);numbers.push_back(40);std::cout << "容器中元素的个数为:" << numbers.size() << std::endl;numbers.resize(10);std::cout << "resize后的容器中可放元素个数为:" << numbers.size() << std::endl;return 0;
}//容器中元素的个数为:4
//resize后的容器中可放元素个数为:10

(5)reserve 改变vector的capacity

  reserve()函数用于为容器预留一定的存储空间,以便在之后添加元素时减少重新分配内存的次数。 它接受一个参数,即预留空间的大小。注意,预留的空间大小并不会直接改变vector的size。

  使用reserve()函数的目的是优化性能,当我们预知容器可能需要存储大量元素时,可以使用reserve()函数提前分配足够的内存空间,避免频繁的内存重新分配和数据复制。

  下面是一个简单的例子,用于说明reserve()函数的含义和概念:

#include <iostream>
#include <vector>int main() {std::vector<int> numbers; // 创建一个int类型的vector容器std::cout << "初始容器的容量为:" << numbers.capacity() << std::endl;numbers.push_back(10); // 向容器中添加元素numbers.push_back(20);numbers.push_back(30);numbers.push_back(40);std::cout << "添加四个元素后的容器的容量为:" << numbers.capacity() << std::endl;numbers.reserve(10);std::cout << "reserve后容器的容量为:" << numbers.capacity() << std::endl;return 0;
}//初始容器的容量为:0
//添加四个元素后的容器的容量为:4
//reserve后容器的容量为:10

注意:
  capacity的代码在vs和g++下分别运行会发现,vs下capacity是按1.5倍增长的,g++是按2倍增长的。 这个问题经常会考察,不要固化的认为,vector增容都是2倍,具体增长多少是根据具体的需求定义的。vs是PJ版本STL,g++是SGI版本STL。

总结:

  resize在开空间的同时还会进行初始化,影响size。

  reserve只负责开辟空间,如果确定知道需要用多少空间,reserve可以缓解vector增容的代价缺陷问题。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

9.Ceph部署

文章目录 Ceph部署前期环境准备实验部署软件安装部署Ceph集群部署mon节点部署OSD存储节点部署mgr节点开启监控模块管理pool Ceph部署 前期环境准备 主机名public网络cluster网络角色admin192.168.242.69admin(管理节点)node01192.168.242.66192.168.242.100.11mon、mgr、osdn…

如何解除“无法完成操作 因为文件包含病毒或潜在垃圾软件”

当运行软件遇到“无法完成操作 因为文件包含病毒或潜在垃圾软件”时&#xff0c;如何解决&#xff1f;如果确认此软件不是病毒软件&#xff0c;那么可以按照如下方法进行解决&#xff1a; 1&#xff1a;关闭防火墙 控制面板-系统和安全-Windows Defender防火墙-自定义设置&am…

前端实现 DIV 高度只有100px,宽度只有100px ,我要在这个DIV放一个宽度200的DIV,左右拉动滚动条显示

<!DOCTYPE html> <html> <head><title>点击监听两组span标签</title><style>.outer-div {width: 100px;height: 100px;overflow-x: scroll;background-color: #abc1ee;}.inner-div {width: 200px;}/* 自定义滚动条样式 */.outer-div::-web…

【milvus】向量数据库,用来做以图搜图+人脸识别的特征向量

1. 安装milvus ref:https://milvus.io/docs 第一次装东西&#xff0c;要把遇到的问题和成功经验都记录下来。 1.Download the YAML file wget https://github.com/milvus-io/milvus/releases/download/v2.2.11/milvus-standalone-docker-compose.yml -O docker-compose.yml看…

七大排序算法——希尔排序,通俗易懂的思路讲解与图解(完整Java代码)

文章目录 一、排序的概念排序的概念排序的稳定性七大排序算法 二、希尔排序核心思想代码实现 三、性能分析四、七大排序算法性能对比 一、排序的概念 排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0…

爆肝整理,接口自动化测试面试题+答案,25k*15薪如何达成的...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、请问你是如何做…

SQLite数据库安装

安装方式一&#xff1a; sudi apt-get install sqlite 安装方式二&#xff1a; https://www.sqlite.org/download.html 1. 把下载的文件 sqlite-autoconf-3420000.tar.gz 上传到开发板 2. tar xvf sqlite-autoconf-3420000.tar.gz 解压 3. cd sqlite-autoconf-3420000 进入…

mac 下 geoserver 安装

一、去官网下载geoserver https://geoserver.org/ 选择一个版本&#xff0c;然后点进去 二、需要配置java环境和设置geoserver 环境变量 1&#xff09;、java 环境安装 Java Downloads | Oracle 中国 2&#xff09;、环境变量设置 1.打开终端&#xff1a;command 空格键 2…

校园课表微信小程序全栈项目

遇到的第一个问题关于npm start 首先找到对应的后端项目 crtl shift (esc键下的波浪号) 召唤终端 Error:Cannot find module dotenv 解决问题: npm install dotenv 简写 npm i dotenv 然后遇到第二个问题 Port 3000 is already in use 我的3000接口被占用 那就要去检…

数仓学习---6、数据仓库概述、 数据仓库建模概述、维度建模理论之事实表、维度建模理论之维度表

这是本人的学习过程&#xff0c;看到的同道中人祝福你们心若有所向往&#xff0c;何惧道阻且长&#xff1b; 但愿每一个人都像星星一样安详而从容的&#xff0c;不断沿着既定的目标走完自己的路程&#xff1b; 最后想说一句君子不隐其短&#xff0c;不知则问&#xff0c;不能则…

windows权限维持

文章目录 不死马权限维持映像劫持技术策略组脚本维持shift粘滞键后门建立影子账号powershell配置文件后门Monitor权限维持利用安全描述符隐藏服务后门进行权限维持iis后门window隐藏技术驱动级文件隐藏 不死马权限维持 <?php ignore_user_abort(); //关掉浏览器&#xff0…

Java将获取的参数,图片以及pdf文件放入到word文档指定位置

首先引入的依赖 <!-- poi库 --> <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId&…