当前位置: 首页 > news >正文

C++ STL std::vector的实现机制【面试】

std::vector 是 C++ 标准模板库(STL)中的一种序列容器,它封装了动态数组的实现,提供了一系列方法来操作这个动态数组。以下是 std::vector 的一些关键实现机制:

  1. 连续内存存储std::vector 通过一块连续的内存空间来存储其元素,这使得通过索引访问元素非常高效。

  2. 动态扩容: 当添加元素超过当前容量时,vector 会自动扩容。这通常涉及到申请更大的内存块,将现有元素复制或移动到新内存,然后释放旧内存。

  3. 容量与大小vector 区分了 size(当前元素数量)和 capacity(不重新分配内存时可以存储的元素数量)。capacity 总是大于或等于 size

  4. 增长策略: 为了减少因扩容导致的性能损耗,vector 通常采用增长策略,如每次扩容时容量翻倍,以减少扩容次数。

  5. 迭代器vector 提供了迭代器,支持对容器元素的遍历,包括随机访问迭代器,允许快速访问任何位置的元素。

  6. 元素操作vector 提供了在尾部快速添加(push_back)和删除(pop_back)元素的操作。对于非尾部的插入和删除,可能需要移动后续所有元素,因此相对较慢。

  7. 内存管理vector 自动管理内存,包括在扩容时申请内存和在元素销毁后释放内存。

  8. 异常安全vector 的操作考虑到了异常安全,例如,在 push_back 操作中,如果元素构造或复制过程中抛出异常,vector 会保持不变。

  9. 模板类vector 是一个模板容器,可以存储任意类型的元素,包括自定义类型。

  10. 构造和析构std::vector 在元素被添加时构造它们,在元素被移除或容器被销毁时析构它们。

相关文章:

C++ STL std::vector的实现机制【面试】

std::vector 是 C 标准模板库(STL)中的一种序列容器,它封装了动态数组的实现,提供了一系列方法来操作这个动态数组。以下是 std::vector 的一些关键实现机制: 连续内存存储: std::vector 通过一块连续的内存…...

激活函数对比

激活函数 sigmoid / tanh / relu / leaky relu / elu / gelu / swish 1、sigmoid 优缺点 1) 均值!0,导致fwxb求导时,方向要么全正要么全负 可以通过batch批量训练来缓解 2) 输入值大于一定范围梯度就会消失 3) 运算复杂 2、tanh 优缺点 1) 均值0 2)…...

pycharm 上一次编辑位置不见了

目录 pycharm2024版 上一次编辑位置不见了,研究发现移到了左下角了,如下图所示: 上一次编辑位置快捷键: 设置为旧版ui,新版不好用 pycharm2024版 上一次编辑位置不见了,研究发现移到了左下角了&#xff…...

FFmpeg播放器的相关概念【1】

播放器框架 相关术语 •容器/文件(Conainer/File):即特定格式的多媒体文件,比如mp4、flv、mkv等。 • 媒体流(Stream):表示时间轴上的一段连续数据,如一段声音数据、一段…...

=与==的优先级

项目场景: 在写消息队列的过程中,问题代码如下: #include "message.h"void send(message *msg, int msg_id); void main() {printf("The sender process id %d\n", getpid());key_t key;int msg_id;message msg {.ty…...

在Linux上的Java项目导出PDF乱码问题

在Linux上的Java项目导出PDF乱码问题 场景:一个Java项目导出PDF,在我本地导出是没有问题,但是部署上Linux上后,导出就出现了乱码了。 处理方案 我这里使用的处理方案是在Linux服务器上安装一些PDF需要使用的字体 1.把字体上传到…...

java:使用shardingSphere访问mysql的分库分表数据

# 创建分库与分表 创建两个数据库【order_db_1、order_db_2】。 然后在两个数据库下分别创建三个表【orders_1、orders_2、orders_3】。 建表sql请参考: CREATE TABLE orders_1 (id bigint NOT NULL,order_type varchar(255) NULL DEFAULT NULL,customer_id bigi…...

红酒:如何选择适合的红酒储存容器

选择适合的红酒储存容器对于保持雷盛红酒的品质和风味至关重要。不同的容器具有不同的优缺点,因此应根据个人需求和条件进行选择。以下是一些常见的红酒储存容器的特点和适用场景: 玻璃瓶:玻璃瓶是常见的红酒储存容器。它具有良好的密封性能、…...

【C++】 使用CRT 库检测内存泄漏

CRT 库检测内存泄漏 一、CRT 库简介二、CRT 库的使用1、启用内存泄漏检测2、设置应用退出时显示内存泄漏报告3、丰富内存泄漏报告4、演示使用 内存泄漏是 C/C 应用程序中最微妙、最难以发现的 bug,存泄漏是由于之前分配的内存未能正确解除分配而导致的。 最开始的少…...

python手动搭建transformer,并实现自回归推理

以下是添加了详细注释的代码和参数介绍: Transformer 实现及自回归推理 本文展示了如何手动实现一个简化版的Transformer模型,并用自回归方式实现一个seq2seq任务,例如机器翻译。 导入必要的库 import torch import torch.nn as nn import…...

AI数据分析:用deepseek进行贡献度分析(帕累托法则)

帕累托法则,也称为80/20法则,是由意大利经济学家维尔弗雷多帕累托提出的。它指出在许多情况下,大约80%的效益来自于20%的原因。这个原则在很多领域都有应用,包括商业、经济、社会问题等。 在数据分析中,帕累托法则可以…...

生成式人工智能的风险与治理——以ChatGPT为例

文 | 西南政法大学经济法学院 马羽男 以ChatGPT为代表的生成式人工智能在创造社会福利的同时,也带来了诸多风险。因此,当务之急是结合我国生成式人工智能发展状况,厘清其应用价值与潜在风险之间的关系,以便在不影响应用发展的前提…...

十足正式在山东开疆拓土!首批店7月初开业,地区便利店现全新面貌!

十足便利店将正式进军山东市场,以济南、淄博两座城市为核心发展起点,目前济南市已经有三家十足门店正在装修施工中,首批15家门店将于7月初开业,这标志着十足集团市场战略布局迈出了至关重要的一步。 随着3月份罗森品牌在济南成功开…...

Unity2D游戏开发-玩家控制

在Unity2D游戏开发中,玩家控制是游戏互动性的核心。本文将解析一个典型的Unity2D玩家控制脚本,探讨如何实现流畅的玩家移动、跳跃和动画切换。以下是一个Unity脚本示例,实现了这些基础功能。 1. 脚本结构 using System.Collections; using …...

如何在 Windows 11 上免费恢复永久删除的文件

虽然Windows 上的已删除文件恢复不简单,但您可能希望免费或无需任何软件即可恢复已删除的文件。下面,我们列出了一个指南,其中包含有关如何在 Windows 11 上免费检索永久删除的文件的说明。 #1 奇客数据恢复 奇客数据恢复是一个广受好评的免…...

Spring boot 集成mybatis-plus

Spring boot 集成mybatis-plus 背景 Spring boot集成mybatis后,我们可以使用mybatis来操作数据。然后,我们还是需要写许多重复的代码和sql语句,比如增删改查。这时候,我们就可以使用 mybatis-plus了,它可以极大解放我…...

数据仓库之缓慢变化维

缓慢变化维(Slowly Changing Dimensions, SCD)是数据仓库设计中的一个重要概念,用于处理维度表中随时间缓慢变化的属性。维度表中的数据通常描述业务实体(如客户、产品、员工等),而这些实体的某些属性&…...

跑mask2former(自用)

1. 运行docker 基本命令: sudo docker ps -a (列出所有容器状态) sudo docker run -dit -v /hdd/lyh/mask2former:/mask --gpus "device0,1" --shm-size 16G --name mask 11.1:v6 (创建docker容器&…...

Linux日志服务rsyslog深度解析(上)

🐇明明跟你说过:个人主页 🏅个人专栏:《Linux :从菜鸟到飞鸟的逆袭》🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、日志在Linux系统中的作用 2、rsyslog历史背景 …...

python的df.describe()函数

一、初识describe()函数 在数据分析和处理的过程中,我们经常需要了解数据的基本统计信息,如均值、标准差、最小值、最大值等。pandas库中的describe()函数为我们提供了这样的功能,它可以快速生成数据集的描述性统计信息。 二、describe()函数的基本用法 describe()函数是pan…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...