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

目录

  • 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 0std::vector<int> c(4, 5);// 5 5 5 5std::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.mzph.cn/pingmian/17306.shtml

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

相关文章

记录一次内存取证

1.情景复现 我姐姐的电脑坏了。我们非常幸运地恢复了这个内存转储。你的工作是从系统中获取她所有的重要文件。根据我们的记忆&#xff0c;我们突然看到一个黑色的窗口弹出&#xff0c;上面有一些正在执行的东西。崩溃发生时&#xff0c;她正试图画一些东西。这就是我们从崩溃…

探索数组的最大值与最小值:从基础到进阶

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言&#xff1a;数组的奥秘 二、基础操作&#xff1a;查找数组的最大值和最小值 三、…

怎样消除工人们对六西格玛培训的抵触情绪?

近年来&#xff0c;企业为了提高产品质量、优化生产流程&#xff0c;纷纷引入了六西格玛管理方法。然而&#xff0c;在实施过程中&#xff0c;不少企业却遭遇了工人们对六西格玛培训的抵触情绪。这种情绪的存在不仅阻碍了六西格玛的推广和应用&#xff0c;也影响了企业的整体运…

packstack一键部署OpenStack云平台

OpenStack一键部署 文章目录 OpenStack一键部署资源列表基础环境一、基础环境配置1.1、配置时间同步1.2、配置网络1.3、添加hosts绑定1.4、更新系统并安装常用软件 二、使用packstack一键部署OpenStack2.1、Train版YUM源安装2.2、Packstack软件包安装2.3、Packstack一键部署Ope…

Unity 生成模版代码

1、创建模版代码文本 using System.Collections; using System.Collections.Generic; using UnityEngine;public class ClassNameScritpItem : MonoBehaviour {public GameObject go;// Start is called before the first frame updatevoid Start(){go new GameObject();}// …

LeetCode115:不同的子序列

题目描述 给你两个字符串 s 和 t &#xff0c;统计并返回在 s 的 子序列 中 t 出现的个数&#xff0c;结果需要对 109 7 取模。 代码 /*dp[i][j]&#xff1a;以i为结尾的s中有以j为尾的t的个数递推公式&#xff1a;当s[i - 1] 与 t[j - 1]相等时&#xff0c;dp[i][j]可以有两…

工业LED显示屏汉字乱码方式的解决

目录 研究背景 解决方法 原因分析 尝试的解决方法 本质原因 写在最后 研究背景 想实现LED显示屏数字、字母、汉字均能正常显示的效果&#xff08;效果如下&#xff09;。在将UTF-8改为GB2312 编码之前&#xff0c;数字和字母不乱&#xff0c;但是汉字会乱码。 解决方法 1…

多线程笔记

1. run() VS start() run()方法&#xff1a; run()方法是java.lang.Runnable接口中定义的一个方法。当一个类实现了Runnable接口&#xff0c;并创建了一个线程对象时&#xff0c;你需要覆盖run()方法来定义线程要执行的任务。run()方法定义了线程的主体逻辑&#xff0c;当线程…

【详细介绍下PostgreSQL】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

Java面试八股之Synchronized锁升级的原理

Synchronized锁升级的原理 Synchronized锁升级是Java为了提高并发性能而引入的一项优化措施&#xff0c;这一机制主要发生在JDK 1.6及之后的版本中。Synchronized锁升级旨在减少锁带来的性能开销&#xff0c;通过从低开销的锁逐步升级到高开销的锁&#xff0c;以适应不同的竞争…

I/O '24|学习资源焕新,技术灵感升级

2024 年 5 月 15 日凌晨举行的 Google I/O 大会为各地的开发者们带来了新的灵感。面对技术革新&#xff0c;相信各位开发者们都迫不及待想要自己上手试一试。 别急&#xff0c;Google 谷歌今年为中国的开发者们准备了一份特别的学习资源&#xff0c;让开发者们自由探索新知。 G…

Angular安装与基础语法

安装Angular cli npm i -g angular-cli 创建项目 npm new project_name(项目名称) 启动项目 cd project_name(j进入新创建的项目) ng serve --open 创建组件 ng g c xxx 会在根组件的统计生成一个组件xxx文件夹&#xff0c;比如ng g c hello 就会生成一个hello组件文件…

夜骑,是探索城市的另一种维度,是与自我对话的静谧时光

月光下的骑行浪漫主义者 想象一下&#xff0c;当白日的喧嚣退去&#xff0c;城市的霓虹开始闪烁&#xff0c;你跨上心爱的自行车&#xff0c;迎着凉爽的晚风&#xff0c;穿梭于灯火阑珊之中。夜骑&#xff0c;不仅仅是一场运动&#xff0c;更是一种逃离日常、探索未知的冒险。但…

【Ambari】Docker 安装Ambari 大数据单机版本

目录 一、前期准备 1.1 部署 docker 1.2 部署 docker-compose 1.3 版本说明 二 、镜像构建启动 2.1 系统镜像构建 2.2 安装包源镜像构建 2.3 kdc镜像构建 2.4 集群安装 2.5 容器导出为镜像 三、Ubuntu环境安装测试 3.1 环境准备 3.2 集群容器启动 一、前期准备 1.…

如何在OrangePi AIpro智能小车上实现安全强化学习算法

随着人工智能和智能移动机器人的广泛应用&#xff0c;智能机器人的安全性和高效性问题受到了广泛关注。在实际应用中&#xff0c;智能小车需要在复杂的环境中自主导航和决策&#xff0c;这对算法的安全性和可靠性提出了很高的要求。传统的强化学习算法在处理安全约束时存在一定…

享受当下,还是留待未来?一项fMRI与眼动追踪技术的联合研究

摘要 时间贴现(temporal discount)是指个体对奖励的估计会随着时间流逝而下降的心理现象。具体而言&#xff0c;当获得奖励的时间以日期(日期条件&#xff1b;例如&#xff0c;2023年6月8日)而不是延迟(延迟条件&#xff1b;例如&#xff0c;30天)呈现时&#xff0c;贴现率较低…

免费,Python蓝桥杯等级考试真题--第14级(含答案解析和代码)

Python蓝桥杯等级考试真题–第14级 一、 选择题 答案&#xff1a;B 解析&#xff1a;键为‘B’对应的值为602&#xff0c;故答案为B。 答案&#xff1a;A 解析&#xff1a;字典的符合为花括号&#xff0c;先键后值&#xff0c;故答案为A。 答案&#xff1a;C 解析&#xff1a…

Stable Diffusion 字体和场景结合【把四季藏在海里】

把四季藏在海里&#xff0c;话不多说&#xff0c;上教程。 一、花瓣找字 打开花瓣找下字&#xff0c;也可以自己做&#xff0c;我不会&#xff0c;谢谢。本文用到的字&#xff0c;版权归原作者所有。 白底黑字&#xff1a;那么就是浪花占主要部分&#xff0c;字就是海的效果&…

【改进】YOLOv8 AND YOLOv9 总目录

说明&#xff1a;本专栏为YOLOV8和YOLOV9的使用以及改进的方法。平时比较忙&#xff0c;只能随缘回答问题哈&#xff0c;谨慎订阅&#xff01; &#x1f49b; &#x1f499; &#x1f49c; ❤️ &#x1f49a; &#x1f49b; &#x1f499; &#x1f49c; ❤️ &#x1f49a; &…