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

news2024/12/23 13:58:18

目录

前言

主要参考

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 到 9
    for (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 above
    std::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;
}

运行结果

共勉

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

感谢阅读

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

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

相关文章

后端-编辑按钮的实现

编辑一共要实现两步&#xff1a; 1.点击编辑蹦出来一个弹窗&#xff0c;此时需要回显&#xff0c;根据id查出来这条数据 2.修改某些值之后点击保存的时候调用修改的接口 根据id查询的时候正常操作 修改值的时候要注意一些问题 mapper层的Employee和impl层的接收实体不一样

Spring Boot漫画之家:漫画爱好者的数字图书馆

2 系统开发环境 2.1 JAVA简介 JavaScript是一种网络脚本语言&#xff0c;广泛运用于web应用开发&#xff0c;可以用来添加网页的格式动态效果&#xff0c;该语言不用进行预编译就直接运行&#xff0c;可以直接嵌入HTML语言中&#xff0c;写成js语言&#xff0c;便于结构的分离&…

RISC-V 汇编语言

安装RISCV工具链 riscv-gnu-toolchain工具链和模拟器安装记录 - 知乎 (zhihu.com) riscv-gnu-toolchain工具链分elf-gcc、linux-gnu-gcc两个版本&#xff0c;以及对应的32位和64位版本。两个版本的主要区别是&#xff1a; riscv32-unknown-elf-gcc、riscv64-unknown-elf-gcc…

长沙市的科技查新机构有哪些

中南大学图书馆科技查新站&#xff1a; 中南大学图书馆科技查新站成立于2003年12月&#xff0c;中南大学图书馆科技查新站作为教育部首批批准的科技查新工作站之一&#xff0c;具备了在全国范围内开展科技查新工作的专业资质。 长沙理工大学科技查新工作站&#xff1a; 长沙理…

Spring Data Elasticsearch

简介说明 spring-data-elasticsearch是比较好用的一个elasticsearch客户端&#xff0c;本文介绍如何使用它来操作ES。本文使用spring-boot-starter-data-elasticsearch&#xff0c;它内部会引入spring-data-elasticsearch。 Spring Data ElasticSearch有下边这几种方法操作El…

【Web】AlpacaHack Round 7 (Web) 题解

Treasure Hunt flag在md5值拼接flagtxt的文件里&#xff0c;如 d/4/1/d/8/c/d/9/8/f/0/0/b/2/0/4/e/9/8/0/0/9/9/8/e/c/f/8/4/2/7/e/f/l/a/g/t/x/t 访问已经存在的目录状态码是301 访问不存在的目录状态码是404 基于此差异可以写爆破脚本 这段waf可以用url编码绕过 做个lab …

【数字电路与逻辑设计】实验五 4人表决器

文章总览&#xff1a;YuanDaiMa2048博客文章总览 【数字电路与逻辑设计】实验五 4人表决器 一、实验内容二、设计过程&#xff08;一&#xff09;设置变量&#xff08;二&#xff09;真值表&#xff08;三&#xff09;表达式 三、源代码&#xff08;一&#xff09;代码说明&…

解决Tomcat运行时错误:“Address localhost:1099 is already in use”

目录 背景: 过程&#xff1a; 报错的原因&#xff1a; 解决的方法&#xff1a; 总结&#xff1a; 直接结束Java.exe进程&#xff1a; 使用neststat -aon | findstr 1099 命令&#xff1a; 选择建议&#xff1a; 背景: 准备运行Tomcat服务器调试项目时&#xff0c;程序下…

【C++】刷题强训(day13)--牛牛冲钻五、最长无重复字数组、重排字符串

目录 1、牛牛冲钻五 1. 题目 1.2 思路 1.3 代码实现 2、最长无重复子数组 2.1 题目 2.2 思路 2.3 程序实现 3、重排字符串 3.1 题目 3.2 思路 3.3 代码实现 刷题汇总&#xff1a;传送门&#xff01; 1、牛牛冲钻五 1. 题目 1.2 思路 由题可知&#xff0c;赢一局则…

Kafka单机及集群部署及基础命令

目录 一、 Kafka介绍1、kafka定义2、传统消息队列应用场景3、kafka特点和优势4、kafka角色介绍5、分区和副本的优势6、kafka 写入消息的流程 二、Kafka单机部署1、基础环境2、iptables -L -n配置3、下载并解压kafka部署包至/usr/local/目录4、修改server.properties5、修改/etc…

在做题中学习(78):数组中第K个最大元素

解法&#xff1a;快速选择算法 说明&#xff1a;堆排序也是经典解决topK问题的算法&#xff0c;但时间复杂度为&#xff1a;O(NlogN) 而将要介绍的快速选择算法的时间复杂度为: O(N) 先看我的前两篇文章&#xff0c;分别学习&#xff1a;数组分三块&#xff0c;随机选择基准…

学习记录,正则表达式, 隐式转换

正则表达式 \\&#xff1a;表示正则表达式 W: 表示一个非字&#xff08;不是一个字&#xff0c;例如&#xff1a;空格&#xff0c;逗号&#xff0c;句号&#xff09; W: 多个非字 基本组成部分 1.字符字面量&#xff1a; 普通字符&#xff1a;在正则表达式中&#xff0c;大…

加载内核映像文件

将kernel转换成elf文件格式&#xff0c;不能直接从loader直接跳转到0x100000&#xff0c;需要解析&#xff0c;提取出代码和数据出来&#xff0c;放到0x10000&#xff08;64kb&#xff09;的位置&#xff0c;1M的位置只是存放elf文件的位置。 4.10加载内核映像文件2 common/el…

11.27-12.5谷粒商城

目录 新增商品 1.上线会员服务 2. 获取分类关联的品牌 3.获取选定分类下的属性分组和属性 4.新增商品vo 5.保存商品信息 6.Spu检索 7.Sku商品检索 新增商品 1.上线会员服务 将会员服务注册到nacos注册中心&#xff0c;启用服务注册发现EnableDiscoveryClient。 同时新增…

【硬件接口】UART接口

本文章是笔者整理的备忘笔记。希望在帮助自己温习避免遗忘的同时&#xff0c;也能帮助其他需要参考的朋友。如有谬误&#xff0c;欢迎大家进行指正。 一、UART接口概要 UART接口&#xff0c;即通用异步接收器/发送器&#xff0c;是一种常用的串行通信协议&#xff0c;广泛应用…

python | print() 函数常被忽略的几点用法

在 python 编程中&#xff0c;print() 是最为基础和常用的函数。 也正因如此&#xff0c;print() 函数的一些基础用法常常被我们初学者所忽略&#xff0c;典型的有&#xff1a;换行问题、间隔符使用及格式化输出等。 一、print() 换行问题 1、默认情况下&#xff0c;每一个 …

VTK编程指南<五>:VTK中的坐标系统、空间变换及VTK矩阵详解

1、坐标系统 计算机图形学里常用的坐标系统主要有 4 种&#xff0c;分别是 Model 坐标系统、World 坐标系统、View坐标系统和 Display坐标系统(这些名词在不同的书里的中文表述均有所差别&#xff0c;所以直接使用英文名词表示)&#xff0c;此外还有两种表示坐标点的方式&#…

MaxEnt模型在物种分布模拟中如何应用?R语言+MaxEnt模型融合物种分布模拟、参数优化方法、结果分析制图与论文写作

目录 第一章 以问题导入的方式&#xff0c;深入掌握原理基础 第二章 常用数据检索与R语言自动化下载及可视化方法 第三章 R语言数据清洗与特征变量筛选 第四章 基于ArcGIS、R数据处理与进阶 第五章 基于Maxent的物种分布建模与预测 第六章 基于R语言的模型参数优化 第七…

【JavaEE 进阶(一)】SpringBoot(上)

博主主页: 33的博客 文章专栏分类:JavaEE ??我的代码仓库: 33的代码仓库?? ???关注我带你了解更多进阶知识 目录 1.前言2.Spring3.第一个SpringBoot程序4.Spring MVC 4.1建立连接 4.1.1RequestMapping使用 4.2请求 4.2.1传递单个参数4.2.2传递多个参数4.2.3传递一个对象…

银行项目网上支付接口调用测试实例

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 公司最近有一个网站商城项目要开始开发了&#xff0c;这几天老板和几个同事一起开着需求会议&#xff0c;讨论了接下来的业务规划和需求策略&#xff0c;等技术需求…