C++容器之向量(std::vector)

news2024/9/20 17:29:09

目录

  • 1 概述
  • 2 使用实例
  • 3 接口使用
    • 3.1 construct
    • 3.2 assigns
    • 3.3 iterators
    • 3.4 capacity
    • 3.5 rezize
    • 3.6 reserve
    • 3.7 shrink_to_fit
    • 3.8 access
    • 3.9 assign
    • 3.10 push_back
    • 3.11 pop_back
    • 3.12 insert
    • 3.13 erase
    • 3.14 swap
    • 3.15 clear
    • 3.16 emplace
    • 3.17 emplace_back
    • 3.18 get_allocator

1 概述

  矢量(vector)是序列容器,表示可以更改大小的数组。
  就像数组一样,向量为其元素使用连续的存储位置,这意味着也可以使用指向其元素的常规指针上的偏移量来访问其元素,并且与数组中一样高效。但与数组(array)不同的是,它们的大小可以动态变化,其存储由容器自动处理。
  在内部,向量使用动态分配的数组来存储其元素。当插入新元素时,可能需要重新分配此数组以增加其大小,这意味着分配一个新数组并将所有元素移动到该数组。就处理时间而言,这是一项相对昂贵的任务,因此,每次向容器中添加元素时,矢量不是每次都重新分配。
  相反,矢量容器可以分配一些额外的存储空间来适应可能的增长,因此容器的实际容量可能大于容纳其元素所严格需要的存储空间(即其大小)。库可以实现不同的增长策略,以在内存使用和重新分配之间取得平衡,但在任何情况下,重新分配都只能以对数增长的大小间隔进行,这样在向量末尾插入单个元素就可以提供分摊的恒定时间复杂度(请参阅push_back)。
  因此,与数组(array)相比,矢量(vector)消耗更多的内存,以换取以高效方式管理存储和动态增长的能力。
  与其他动态序列容器(deques、list和forward_lists)相比,向量非常有效地访问其元素(就像数组一样),并且相对有效地从其末端添加或删除元素。对于涉及在末尾以外的位置插入或删除元素的操作,它们的性能比其他操作差,并且迭代器和引用的一致性不如list和forward_list。

其类图如下:
在这里插入图片描述

2 使用实例

void VectorSuite::push_back()
{
   
    int array[] = {
    1, 2, 3, 4, 5 };
    std::vector<int> a;
    std::vector<int> b;
    std::vector<int> c;

    for(size_t i = 0; i < ARRAY_SIZE(array); i++)
        a.push_back(array[i]);
    TEST_ASSERT_EQUALS(true, a.capacity() > a.size())

    
    b.reserve(ARRAY_SIZE(array));
    for(size_t i = 0; i < ARRAY_SIZE(array); i++)
        b.push_back(array[i]);
    TEST_ASSERT_EQUALS(true, b.capacity() == b.size())

    c.resize(ARRAY_SIZE(array));
    for(size_t i = 0; i < ARRAY_SIZE(array); i++)
        c[i] = array[i];
    TEST_ASSERT_EQUALS(true, c.capacity() == c.size())
}

3 接口使用

3.1 construct

std::vector<int> getVector(int size, int value)
{
   
    return std::vector<int>(size, value);
}
void VectorSuite::construct()
{
   
    std::vector<int> a;
    std::vector<int> b(4); // 0 0 0 0
    std::vector<int> c(4, 5);// 5 5 5 5
    std::vector<int> d({
   1, 2, 3, 4, 5});
    std::vector<int> e(d.begin(), d.end());
    std::vector<int> f(d);
    std::vector<int> g(getVector(6, 8));
    TEST_ASSERT_EQUALS(0, a.size())
    TEST_ASSERT_EQUALS(4, b.size())
    TEST_ASSERT_EQUALS(4, c.size())
    TEST_ASSERT_EQUALS(5, d.size())
    TEST_ASSERT_EQUALS(5, e.size())
    TEST_ASSERT_EQUALS(5, f.size())
    TEST_ASSERT_EQUALS(6, g.size())
}

3.2 assigns

void VectorSuite::assigns()
{
   
    std::vector<int> a;
    std::vector<int> b;
    std::vector<int> c;
    a = {
    1, 2, 3, 4, 5 };
    b = a;
    c = getVector(5, 10);

    

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

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

相关文章

智慧树下做游戏

游戏开发工程师致力于游戏总体设计 &#xff0c;负责游戏开发工具和运营维护工具的设计与开发 &#xff0c;并配合主程序完成游戏架构及各大功能的设计、开发、调试和其他技术支持 就业方向&#xff1a; 一般有客户端游戏开发和服务器游戏开发 客户端开发&#xff1a; 主要负…

【漏洞复现】Gradio component_server 任意文件读取漏洞(CVE-2024-1561)

0x01 产品简介 Gradi0是一个开源的 Python库&#xff0c;用于创建机器学习模型的交互式界面。它使得展示和测试模型变得简单快捷&#xff0c;无需深入了解复杂的前端技术。广泛应用于数据科学、教育、研究和软件开发领域&#xff0c;尤其适合于快速原型设计、模型验证、演示和…

在没有足够测试数据的请情况下,如何验证前端页面的分页展示和渲染情况

问题描述&#xff1a;测试过程中&#xff0c;为了验证前端页面的展示效果及分页组件的展示情况&#xff0c;测试人员一般都会选择在数据库造数据&#xff0c;但遇到表格管理逻辑特别复杂的情况&#xff0c;可能会耗费大量的时间&#xff0c;此时我们可以选择使用工具模拟返回值…

关于kube-prometheus拉取镜像的问题

由于国内网络环境的问题想通过kube-prometheus配置监控但是拉取镜像会报错 包已经打好下载好镜像就可以使用&#xff1a; https://download.csdn.net/download/m0_59744084/89349768 kubectl get pod -n monitoring 问题&#xff1a;"Failed to pull image "regist…

IC解析之SN74HCS595QPWRQ1

目录 1.主要参数2. 接口定义3. 工作原理分析移位寄存器器的作用SN74HCS595QPWRQ1工作原理 4.总结 1.主要参数 2. 接口定义 其中QH‘为串行输出接口&#xff0c;QA~QH为并行输出接口&#xff0c;SER为串行输入接口&#xff0c;其他未移位以及储存控制引脚 3. 工作原理分析 移位…

26计算机操作系统408考研--操作系统设备管理篇章(五)

文章目录 一、设备是什么&#xff1f;设备管理目标和任务I/O设备分类 二、I/O系统控制方式程序直接控制方式中断控制方式DMA控制方式通道控制方式 I/O软件的组成I/O软件设计目标和原则I/O软件结构设备驱动程序设备无关软件用户层软件用户层的I/O软件 具有通道的设备管理通 道通…

R绘图学习笔记

1、R语言绘制海岸线边界 参考&#xff1a; Drawing beautiful maps programmatically with R, sf and ggplot2 — Part 1: Basics 使用R绘制世界地图及纬度统计图 Drawing maps with R. A basic tutorial&#xff1a;https://dr2blog.hcommons.org/2020/03/23/drawing-maps-wit…

第 52 期:MySQL 半同步复制频繁报错

社区王牌专栏《一问一实验&#xff1a;AI 版》全新改版归来&#xff0c;得到了新老读者们的关注。其中不乏对 ChatDBA 感兴趣的读者前来咨询&#xff0c;表达了想试用体验 ChatDBA 的意愿&#xff0c;对此我们表示感谢 &#x1f91f;。 目前&#xff0c;ChatDBA 还在最后的准备…

keepalived交叉编译

前言 Keepalived可以实现对服务器的健康检查&#xff0c;当主服务器出现故障时&#xff0c;自动将服务切换到备份服务器上&#xff0c;确保服务的连续性&#xff0c;避免单点故障。它还可以管理一个虚拟 IP 地址&#xff0c;在主备服务器之间进行灵活切换&#xff0c;对外提供…

Linux如何在目录下灵活创建、浏览、删除百万个文件

文章目录 一、创建百万级小文件1、单核CPU情况2、多核CPU情况3、执行效率对比3.1、单核的顺序执行3.2、多核的并发执行 二、如何列出/浏览这些文件1、查看目录下文件的数量2、列出&#xff1f;3、ls -f&#xff08;关闭排序功能&#xff09;3.1、执行效率对比 4、通过重定向导入…

2024深圳数字能源展推介会在巴西圣保罗举行

4月26日&#xff0c;深圳市发展和改革委员会在巴西圣保罗国际工程机械及矿山机械展上举行专题推介会&#xff0c;介绍将于今年下半年在深圳市举办的2024国际数字能源展。 深圳市发展和改革委员会主任郭子平在推介会上介绍&#xff0c;为进一步深化数字能源领域互利共赢&#xf…

“二叉堆:不是,啊?”

目录 前言一、堆的概念及结构堆的性质&#xff1a;堆的结构:最大堆最小堆堆顶注意 二、堆的实现1.初始化堆2. 堆的插入什么是堆的向上调整算法&#xff1f; 3.堆的删除什么是堆的向下调整算法&#xff1f; 4.获取堆顶的数据5.获取堆的数据个数6.堆的判空7.堆的销毁 三、建堆的时…

逻辑分析仪的调试使用

调试软件下载&#xff1a;点击跳转 一、接线 逻辑分析仪 设备 GND --- GND CHX&#xff08;数据通道&#xff09; --- 通信引脚 二、数据采集 图中两个可以选择数字大小的地方分别表示 采样深度 &#xff08;10M Samples&a…

eBay运营账号防关联成功的关键因素是什么?

一、什么是eBay&#xff1f; eBay如今的发展现状呈现出积极且充满活力的态势。作为全球知名的在线拍卖和购物平台&#xff0c;随着全球消费者对线上购物的需求不断增长&#xff0c;这为卖家提供了广阔的市场空间和盈利机会&#xff0c;但多账号的运营若处理不好容易引起账号被关…

宝塔下新增站点 No Input File Specified.错误修复

今天明月收到了一个购买【站长必备在线工具源码含上百款工具-博客优化修复版】用户的求助&#xff0c;在宝塔里新增网站部署好工具源码后&#xff0c;访问出现“No input file specified.”的提示。其实出现这个提示一般都是 PHP 文件无法被解析造成的。 简单排查了一下宝塔相关…

521源码-免费下载-WordPress全能自动采集与发布插件 – WP-AutoPostPro 汉化版

更多网站源码学习教程&#xff0c;请点击&#x1f449;-521源码-&#x1f448;获取最新资源 本工具下载地址&#xff1a;WordPress全能自动采集与发布插件 – WP-AutoPostPro 汉化版 - 521源码 WP-AutoPostPro是一款出类拔萃的WordPress自动采集发布插件&#xff0c;凭借其卓…

剪画小程序:分享3个无字幕保存高清视频的方法!!!

视频怎么去水印&#xff1f; 视频制作是当下越来越流行的一种形式&#xff0c;但是很多时候我们会发现一些精美的视频却被水印所遮盖。 尤其是一些自媒体人想要进行二创时。。。 那么&#xff0c;该如何去除视频水印保存高清原视频呢&#xff1f; 今天&#xff0c;小编分享…

全国各城市间驾车耗时和距离矩阵数据集(更新至2022年)

数据简介&#xff1a;城市之间距离越远&#xff0c;耗时越长。经济发达地区的交通状况较好。各城市之间的驾车耗时和距离存在差异。有些城市之间的交通非常便捷&#xff0c;而有些城市之间的交通则较为不便。这表明中国的交通网络发展尚不平衡&#xff0c;需进一步优化。特别是…

解密 Alpha 勒索软件

Alpha 勒索软件很容易与 ALPHV 勒索软件混淆&#xff0c;但其实这是两个不同的勒索软件团伙。近期&#xff0c;Alpha 勒索软件团伙在暗网上建立了数据披露网站&#xff0c;并且对外公开了6个受害者。 通常来说&#xff0c;勒索软件运营者在启动数据披露网站前会保持攻击态势。一…

Yolov5保姆及入门-含源码【推荐】

前言 YOLO系列模型作为一种实时目标检测算法&#xff0c;自从YOLO1发布以来&#xff0c;就以其检测速度快、准确率高而受到广泛关注。随着技术的迭代&#xff0c;YOLO系列已经发展到了YOLO8。本文将详细介绍YOLO5的技术规格、应用场景、特点以及性能对比。 yolov5源码下载地址…