Vector底层原理——面试之我答

news2025/2/27 11:08:26

Vector概述

        vector是STL中最常用的容器,vector主要功能是作动态数组来弥补传统数组的缺点,如:不灵活,不方便插入等等。

        Vector支持随机访问,因此访问某一个元素的时间复杂度是O(1)。

        vector中存储着许多易用的函数方法,方便使用。

       

Vector底层

本质

        vector容器在底层是泛型的动态顺序表,是一段连续的内存空间,同时其本质是一个模板,因此可以存储不同数据类型的元素。

        vector有三个基本的指针,分别是start,finish,end_of_storage;

        其分别指向容器的

                首元素,

                尾元素的下一个位置,

                以及容器的最大位置。

        靠着这三个指针,vector实现了许多的功能的函数与方法,如已存储元素大小,剩余空间大小,总容器空间大小等等。

        而容器的迭代器iterator是传入的数据类型的指针别名

               

扩容机制

        作为一个动态容器,vector有扩容功能。vector的size(),和capacity()方法分别记录着vector的元素数量和总容器空间大小。那么当存储的size()增大超过capacity()时,vector就会进行扩容操作。以Linux为代表的扩容大小一般为2倍。

        vector扩容分为三步:

                1.完全弃用现有的内存空间,重新申请更大的内存空间

                2.将旧容器空间内的元素按顺序存储的方式存入新容器空间

                3.释放旧容器空间内存

        需要注意的是,扩容机制时间成本很高,所以如果提前能确定容器空间的大小最好提前设定好容器空间的大小,来避免扩容。而且因为使用了全新的内存空间,原有的指针,迭代器可能会失效。

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

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

相关文章

自动化测试入门知识 —— 数据驱动测试

一、什么是数据驱动测试? 数据驱动测试是一种测试方法,它的核心思想是通过不同的测试数据来验证同一个测试逻辑。通常情况下,测试用例中的输入数据和预期结果会被提取出来,以便可以通过不同的测试数据进行重复执行。 数据驱动测…

spacy 中文语义分析下载安装使用

概念 spaCy 下载 安装spacy pip install -U spacy -i https://pypi.tuna.tsinghua.edu.cn/simple 安装模型 https://github.com/explosion/spacy-models/releases 找到对应的模型,下载,如下图 安装 下载是gz,下载后安装 pip instal…

Flullter学习第一天:什么是Flullter与Flullter安装

1.简介 Flutter使用dart作为主要开发语言,开发后可多端编译,并且能调用原生api 2.安装 官网:Install | Flutter 让我们读下为中国用户特制的文档,访问中国官网 Flutter: 为所有屏幕创造精彩 - Flutter 中文开发者网站 - Flutter 获取 Flutter SDK 点击下方的安装包&#x…

记录一个iOS实现视频分片缓存拖拽快进不能播放的问题

代码现状 首先来看一下我们将视频数据塞给请求的代码 - (void)finishLoadingWithLoadingRequest:(IdiotResourceTask *)task {// printf("哈哈执行到这里执行到到这里\n");printf("哈哈哈数量数量%ld\n", self.taskList.count);//填充信息task.loadingRe…

Python/Java/Php/C#/Go/C/C++这几个主力语言,谁到底真的不行

1.前言 阿里最近又进行了史诗级的大裁员,IT行业肉眼可见的持续性衰退与没落。当潮水退却,才能看出谁在裸泳。作为当今计算机编程界的几大主力语言,谁才真正的裸泳者呢?引用原文:这几个主力语言,谁到底真的不行 2.描述…

Java项目-苍穹外卖-Day11-Apache ECharts数据统计

文章目录 前言Apache ECharts介绍入门案例 营业额统计需求分析代码开发功能测试 订单统计需求分析代码开发功能测试 销量排名统计需求分析代码开发功能测试 前言 主要是以下四项的统计,以不同形式的图形进行展示 Apache ECharts 介绍 入门案例 自己去网站上看一…

MATLAB R2018b安装教程

目录 一、软件下载 二、软件介绍 三、安装须知 四、安装步骤 【最后】 🎈个人主页:库库的里昂 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏 ✨收录专栏:MATLAB基础及应用🤝希望作者的文章能…

Redis之string类型的三大编码解读

目录 string类型的三大编码 int 编码 embstr 编码 raw 编码 明明没有超过阈值,为什么变成raw? 查看数据类型相关命令 redis看看类型:type key 看看编码:object encoding debug结构:debug object person 在 Redis 中,String 类型的数据结构并…

EPICS电机支持(asynMotor)

EPICS电机支持 1) 顶层对象是EPICS motor记录 已经对这个对象编写了很多代码:spec,IDL和Python类等 2)下一层是EPICS设备支持 了解motor记录,与驱动会话 3)最底层是EPICS驱动 对motor记录一无所知&am…

FastJson 漏洞复现

文章目录 FastJson 漏洞复现1. FastJson 1.2.24 反序列化导致任意命令执行漏洞1.1 漏洞描述1.2 漏洞原理1.3 漏洞复现1.3.1 环境启动1.3.2 漏洞检测1.3.3 漏洞验证 1.4 漏洞利用1.5 修复方案 2. Fastjson 1.2.47 远程命令执行漏洞2.1 漏洞描述2.2 漏洞复现2.2.1 环境启动2.2.2 …

SV-315C 15寸触模屏 I3工控机 网络广播主机

SV-315C 15寸触模屏 I3工控机 网络广播主机 智能公共广播系统IP网络广播主机 ※ 高档7U铝合金黑色拉丝面板,美观大方; ※ 嵌入触摸屏和数字矩阵键盘操作集成软件; ※ 工业级机柜式机箱设计,有较高的防磁、防尘、防冲击的能力…

FPGA原理与结构——时钟IP核的使用与测试

一、前言 本文介绍xilinx的时钟IP核 Clocking Wizard v6.0的具体使用与测试过程,在学习一个IP核的使用之前,首先需要对于IP核的具体参数和原理有一个基本的了解,具体可以参考: FPGA原理与结构——时钟IP核原理学习https://blog.c…

[网鼎杯 2020 青龙组]singal详细题解--VMP 直接逆向,angr模拟执行,ponce符号化

文章目录 直接逆向提取opcode获取指令执行流getflag注意 使用Angr使用Ponce插件安装并配置Ponce具体操作 参考资料 直接逆向 提取opcode 主函数并不复杂,关键内容在vm_opcode中,先提取出main函数中的opcode unsigned int OpCode[114] {0x0000000A, 0x00000004, 0x00000010,…

Spring上下文模块ApplicationContextAware

博主介绍:✌全网粉丝3W+,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌ 博主作品:《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+…

《数字图像处理-OpenCV/Python》连载(6)基于Matplotlib显示图像

《数字图像处理-OpenCV/Python》连载(6)基于Matplotlib显示图像 本书京东优惠购书链接:https://item.jd.com/14098452.html 本书CSDN独家连载专栏:https://blog.csdn.net/youcans/category_12418787.html 第1章 图像的基本操作 …

软件系统验收测试需要注意的地方

验收测试 一、软件验收测试含义: 软件验收测试是指测试人员检验软件是否符合软件规格说明书和用户需求的测试活动。 验收测试是软件测试的最后一个环节,也是最为关键的一个要素。 它关系到软件开发公司的产品质量,也关系到需求方的产品能…

二分查找[整数二分]

引例 不知道你有没有玩过猜数字游戏,在0到100之间随机选取一个数,让你猜是几,比如这个数是67,如果你猜了50,就会提示你小了,那么你就会去51到100之间猜,你猜了75,就会提示你大了,你就会去51到74之间去猜,就这样一直猜,数字可取的区间越来越小,用不了多久就可以猜出.当你每次都…

SpringBoot如何实现热部署

热部署是软件开发中一个非常有用的功能,它允许我们在不重新启动整个应用的情况下,依旧能够使我们修改的代码生效。 现在Java Web 开发应该都是使用的 SpringBoot,那么本篇文章就来介绍SpringBoot 如何实现热部署? 1、热部署的优点…

如何提取视频中的音频?几个步骤轻松提取

在现今社交媒体的风靡下,许多人都会使用手机录制视频来记录生活中的美好瞬间。有时候,我们也会想要提取视频中的音频,例如将自己的演讲录音分发给听众。本文将会介绍如何在手机上提取视频中的音频以及需要注意的事项。 使用应用程序 首先&am…

Linux Debian12使用git将本地项目上传到码云(gitee)远程仓库

一、注册码云gitee账号 这个可以参考其他教程,本文不做介绍。 gitee官网:https://gitee.com/ 二、Linux Debian12安装git 如果Linux系统没有安装git,可以使用下面命令安装git sudo apt install git 三、gitee新建仓库 我这只做测试&…