《STL源码剖析》笔记记录
《STL源码剖析》笔记记录
2.空间适配器(allocator)
分配的是空间,而不一定是内存
为了精密分⼯,STL allocator 决定将这两个阶段操作区分开来。
1、对象构造由 ::construct() 负责;对象释放由 ::destroy() 负责。
2、内存配置由 alloc::allocate() 负责;内存释放由 alloc::deallocate() 负责;
0.实际源码阅读
1.阅读体验
1…函数名间 和::间可以有空格,不推荐,但宏定义时经常出现
2.struct 和 class继承时可以不写继承方式,采用默认方式
3、需要边看边记录
4、从简单的接口开始看起
5、两个类互相包含,适用于特殊场景,如双向链表,父子关系等。
_Container_proxy
__Myproxy : const _Container_base12 *;
_Myfirstiter :_Iterator_base12 *;
_Container_base12
_Myproxy:_Container_proxy *
_Iterator_base12
_Myproxy:_Container_proxy *
_Mynextiter:_Iterator_base12 *
6、链表和指针不一样
7、operator 类型名() const;
类型转换,隐式转换为value_type 类型
8、取size_t最大值
if ((size_t)(-1) / _Sz < _Count)
_Xbad_alloc(); // report no memory
2.Xmemory0 文件 分配器
1、 list和vector的底层实现,都是连续内存块
2、 ::operator delete 不需要知道实际分配的内存大小,因为这个信息由内存管理器在分配时记录下来。释放内存时,内存管理器会根据这些信息来正确释放内存。
::operator delete(_Ptr);
3、完美转发
Forward 源码
完美转发的核心是使用 std::forward 和模板参数推导
4、包装迭代器所需的数据类型
struct _Simple_types
{ // wraps types needed by iterators 包装迭代器所需的数据类型
typedef _Value_type value_type;
5、typedef 用法
typedef existing_type new_type_name;
typedef void *type; type:为 void * 定义的别名。
6、class allocator
allocator 类调用_Allocate
3. 模板
1.参数也能做模板,参数不同也能重载不同类型(说明)
template<bool,
class _Ty1,
class _Ty2>
struct _If
{ // type is _Ty2 for assumed false
typedef _Ty2 type;
};
template<class _Ty1,
class _Ty2>
struct _If<true, _Ty1, _Ty2>
{ // type is _Ty1 for assumed true
typedef _Ty1 type;
};
2.2 具备次配置力的SGI空间配置器
关键概念
1、第一级配置器 > 128byte 直接申请,malloc, free
2、第二级配置器
内存数组 freelist
内存池
2.3 内存基本处理工具
2.3.1 uninitialized_copy
2.3.2 uninitialized_fill
2.3.3 uninitialized_fill_n
3.迭代器概念以及traits编程方法
3.4 Traits 编程技巧
Traits 可以理解为一种类型的 “特性” 或 “属性” 的封装。通过 Traits 类,我们可以在编译时根据不同的类型获取其相关的信息,如类型的大小、是否为指针类型、是否为可拷贝类型等,或者执行与该类型相关的特定操作。Traits 编程技巧主要利用模板特化来实现,针对不同的类型提供不同的实现。
作用
实现泛型算法的优化
适配不同容器类型,根据元素类型选择合适操作。
3.4.1 相应型别
value_type :迭代器所指对象的类型,原⽣指针也是⼀种迭代器,对于原⽣指针 int*,
int 即为指针所指对象的类型,也就是所谓的 value_type 。
difference_type : ⽤来表示两个迭代器之间的距离,对于原⽣指针,STL 以 C++ 内
建的 ptrdiff_t 作为原⽣指针的 difference_type。
reference_type : &。
pointer_type : 就是相应的指针类型,对于指针来说,最常⽤的功能就是 operator* 和
operator-> 两个运算符。
iterator_category: 作⽤是标识迭代器的移动特性和可以对迭代器执⾏的操作,从
iterator_category 上,可将迭代器分为 Input Iterator、Output Iterator、Forward
Iterator、Bidirectional Iterator、Random Access Iterator 五类,这样分可以尽可能地提
⾼效率。
4. 序列式容器
相关文章:
《STL源码剖析》笔记记录
《STL源码剖析》笔记记录 2.空间适配器(allocator) 分配的是空间,而不一定是内存 为了精密分⼯,STL allocator 决定将这两个阶段操作区分开来。 1、对象构造由 ::construct() 负责;对象释放由 ::destroy() 负责。 2、内存配置由 alloc::al…...
《Linux C 智能 IO 矩阵:输入输出的自适应数据流转》
1. 标准库IO简介 标准库IO特点:通过操作系统提供的接口(API)和操作系统进行交互。(接近100个函数) 1.1. IO的过程 操作系统:向上为用户提供操作接口,向下为统筹控制硬件。 操作系统的组成&#…...
idea生成自定义Maven原型(archetype)项目工程模板
一、什么是Maven原型(Maven archetype) 引自官网的介绍如下: Maven原型插件官网地址 这里采用DeepSeek助手翻译如下: Maven 原型 什么是原型? 简而言之,原型是一个 Maven 项目模板工具包。原型被定义为一…...
CES Asia 2025增设未来办公教育板块,科技变革再掀高潮
作为亚洲消费电子领域一年一度的行业盛会,CES Asia 2025(第七届亚洲消费电子技术贸易展)即将盛大启幕。今年展会规模再度升级,预计将吸引超过500家全球展商参展,专业观众人数有望突破10万。除了聚焦人工智能、物联网、…...
(二 十 二)趣学设计模式 之 备忘录模式!
目录 一、 啥是备忘录模式?二、 为什么要用备忘录模式?三、 备忘录模式的实现方式四、 备忘录模式的优缺点五、 备忘录模式的应用场景六、 总结 🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,…...
物联网同RFID功能形态 使用场景的替代品
在物联网(IoT)和自动识别技术领域,除了RFID标签外,还有一些其他技术产品可以在形态和大小上与RFID标签相似,同时提供类似或更强大的功能。以下是几种能够替代RFID标签的产品: 一、NFC标签 NFC(…...
蓝陵科技:以“数字底座”之力,全面布局影视行业工业化
“在数字技术与文化产业深度融合的今天,海南蓝陵数字科技有限公司(以下简称蓝陵科技)凭借其卓越的渲染实力和前瞻性的战略布局,正逐步成为推动中国影视行业工业化进程的重要力量。2025年2月,蓝陵科技不仅获得了陵水融媒…...
React + TypeScript 实战指南:用类型守护你的组件
TypeScript 为 React 开发带来了强大的类型安全保障,这里解析常见的一些TS写法: 一、组件基础类型 1. 函数组件定义 // 显式声明 Props 类型并标注返回值 interface WelcomeProps {name: string;age?: number; // 可选属性 }const Welcome: React.FC…...
本地部署大数据集群前置准备
1. 设置VMware网段 虚拟网络编辑器——更改设置——选择VMnet8——子网改成192.168.88.0——NAT设置——网关设置为192.168.88.2 2. 下载CentOS操作系统 下载CentOS 7.6(1810)版本 3. 在VMware中安装CentOS操作系统 创建新的虚拟机——典型——安装光盘映像文件——输入账…...
016.3月夏令营:数理类
016.3月夏令营:数理类: 中国人民大学统计学院: http://www.eeban.com/forum.php?modviewthread&tid386109 北京大学化学学院第一轮: http://www.eeban.com/forum.php?m ... 6026&extrapage%3D1 香港大学化学系夏令营&a…...
历年北京理工大学计算机复试上机真题
历年北京理工大学计算机复试上机真题 在线评测:https://app2098.acapp.acwing.com.cn/ 分段函数 题目描述 编写程序,计算下列分段函数 yf(x) 的值。 当 0< x <2,y -x2.5;当 2< x <4,y2-1.5(x-3)(x-3)…...
Linux的缓存I/O和无缓存IO
一、I/O缓存的背景 I/O缓存是指在内存里开辟一块区域,存放用来接收用户输入和用于计算机输出的数据,以减小系统开销和提高外设效率。linux对IO文件的操作分为不带缓存的IO操作和带缓存的IO操作(标准IO操作)。为什么存在C标准I/O库…...
题目 3216 ⭐团建⭐【DFS】蓝桥杯2024年第十五届省赛
小蓝正在和朋友们团建,有一个游戏项目需要两人合作,两个人分别拿到一棵大小为 n 和 m 的树,树上的每个结点上有一个正整数权值 c 1 , c 2 , ⋅ ⋅ ⋅ , c n c_1, c_2, , c_n c1,c2,⋅⋅⋅,cn, d 1 , d 2 , ⋅ ⋅ ⋅ , d m d_1, d_…...
从0到1入门Linux
一、常用命令 ls 列出目录内容 cd切换目录mkdir创建新目录rm删除文件或目录cp复制文件或目录mv移动或重命名文件和目录cat查看文件内容grep在文件中查找指定字符串ps查看当前进程状态top查看内存kill终止进程df -h查看磁盘空间存储情况iotop -o直接查看比较高的磁盘读写程序up…...
战略合作升级 | 大势智慧携手广西地测院,共绘智慧测绘新蓝图
2月26日,武汉大势智慧科技有限公司(以下简称“大势智慧”)与广西壮族自治区地理信息测绘院(以下简称“广西地测院”)在南宁举行战略合作升级签约仪式暨技术交流座谈会。 大势智慧董事长黄先锋与广西地测院党委书记、院…...
批量插入对比-mysql-oracle-sqlserver
单个插入mysql //单个 根据有值就插入,无值不改动 <insert id"insertOne" keyColumn"id" keyProperty"id"parameterType"com.test.log" useGeneratedKeys"true">insert into test_mysql_tab<trim p…...
jmeter阶梯式压测
1、安装plugins manager 链接 Install :: JMeter-Plugins.org 将下载下来的jar包放置在jemter文件的lib\ext下, 重启Jmeter 2、安装阶梯测试第三方插件 在Available Plugins中找到Custom Thread Groups,点击Apply Changes and Restart JMeter后等待插件…...
nginx.conf 完整配置总结概述
----------------------------------------------------------- /usr/local/nginx/sbin/nginx -s reload # 重新载入配置文件 /usr/local/nginx/sbin/nginx -s reopen # 重启 Nginx /usr/local/nginx/sbin/nginx -s stop # 停止 Nginx /usr/local/nginx/sbin/nginx …...
docker常规命令和高级用法
Docker 是一个强大的容器化平台,提供了丰富的命令和功能来管理容器、镜像、网络和存储等。以下是一些常用的 Docker 命令及其高级用法。 1. 容器管理 1.1 启动容器 基本用法: docker run <image_name>示例: docker run ubuntu高级用法…...
Spark核心之02:常用算子详解
1、RDD操作详解 # 启动spark-shell spark-shell --master local[2] 1.1 基本转换 1) map map是对RDD中的每个元素都执行一个指定的函数来产生一个新的RDD。 任何原RDD中的元素在新RDD中都有且只有一个元素与之对应。 举例: scala> val a sc.parallelize(1 …...
【CSS—前端快速入门】CSS 常用样式
CSS 常用 CSS 样式 1. 前端样式查询网站: MDN Web Docs (mozilla.org) w3school 2. border 2.1 借助 MDN 了解 border 我们借助 MDN 网站来学习 border 样式的使用: 2.2 border 常见属性 保存代码,打开页面: 对于标签不同样式的…...
探索DeepSeek-R1的核心秘诀:突破SFT技术的新篇章
摘要 近期,一种显著超越SFT(Sequence-to-Sequence with Teacher Forcing)的技术成为研究焦点。作为o1/DeepSeek-R1的核心秘诀,该技术不仅提升了模型性能,还成功应用于多模态大型模型中,实现了功能扩展。与传…...
DailyNotes 增加提醒功能
TODO:准备给 DailyNotes 增加一个提醒功能,准备接入 AI 来做一些事情。试了一下,非常靠谱。 具体 DailyNotes 和 Ollama 的交互方式,可以直接调用命令行,也可以走网络API。 rayuK2CD9WCYN4 ~ % ollama run deepseek-…...
[Computer Vision]实验六:视差估计
目录 一、实验内容 二、实验过程 2.1.1 test.py文件 2.1.2 test.py文件结果与分析 2.2.1 文件代码 2.2.2 结果与分析 一、实验内容 给定左右相机图片,估算图片的视差/深度;体现极线校正(例如打印前后极线对)、同名点匹配…...
软件测试基础:功能测试知识总结
🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 一、测试项目启动与研读需求文档 (一) 组建测试团队 1、测试团队中的角色 2、测试团队的基本责任 尽早地发现软件程序、系统或产品中…...
171. Excel 表列序号
Excel 表列序号 题目描述尝试做法推荐做法 题目描述 给你一个字符串 columnTitle ,表示 Excel 表格中的列名称。返回 该列名称对应的列序号 。 例如: A -> 1 B -> 2 C -> 3 … Z -> 26 AA -> 27 AB -> 28 … 示例 1: 输入: colum…...
03.05 QT事件
实现一个绘图工具,具备以下功能: 鼠标绘制线条。 实时调整线条颜色和粗细。 橡皮擦功能,覆盖绘制内容。 撤销功能,ctrl z 快捷键撤销最后一笔 程序代码: <1> Widget.h: #ifndef WIDGET_H #define WIDGET…...
es如何进行refresh?
在 Elasticsearch 中,refresh 操作的作用是让最近写入的数据可以被搜索到。以下为你介绍几种常见的执行 refresh 操作的方式: 1. 使用 RESTful API 手动刷新 你可以通过向 Elasticsearch 发送 HTTP 请求来手动触发 refresh 操作。可以针对单个索引、多个索引或者所有索引进…...
unity6 打包webgl注意事项
webgl使用资源需要异步加载 使用localization插件时要注意,webgl不支持WaitForCompletion,LocalizationSettings.InitializationOperation和LocalizationSettings.StringDatabase.GetTable都不能用 web里想要看到具体的报错信息调试开启这两个…...
【前端基础】Day 9 PC端品优购项目
目录 1. 品优购项目规划 1.1 网站制作流程 1.2 品优购项目整体介绍 1.3 学习目的 1.4 开发工具以及技术栈 1.5 项目搭建工作 1.6 网站favicon图标 1.7 网站TDK三大标签SEO优化 2. 品优购首页制作 2.1 常见模块类命名 2.2 快捷导航shortcut制作 2.3 header制作 2.4…...
【django初学者项目】
下面为你详细介绍如何创建一个简单有趣的 Django 项目——博客系统。这个项目允许用户创建、查看、编辑和删除博客文章。 步骤 1:环境准备 首先,确保你已经安装了 Python 和 pip。然后,创建一个虚拟环境并激活它,接着安装 Django…...
自学微信小程序的第十三天
DAY13 1、使用map组件在页面中创建地图后,若想在JS文件中对地图进行控制,需要通过地图API来完成。先通过wx.createMapContext()方法创建MapContext(Map上下文)实例,然后通过该实例的相关方法来操作map组件。 const m…...
gitbash忽略未追踪文件的解决方式
文章目录 问题描述,如下图解决方式 问题描述,如下图 因为这些事项目本地运行或者IDE环境配置时产生的文件或目录,手动删除后还来出现,怎么实现忽略不显示呢? 解决方式 查看项目的根目录下是否存在.gitignore文件&…...
React生态、Vue生态与跨框架前端解决方案
React生态系统 1 基础框架 React.js 是一个用于构建UI的JavaScript库。 2 应用框架 Next.js 是基于React.js的完整应用框架。主要负责应用如何工作: 应用架构:路由系统、页面结构渲染策略:服务端渲染(SSR)、静态生成(SSG)、客户端渲染性…...
GPPT: Graph Pre-training and Prompt Tuning to Generalize Graph Neural Networks
GPPT: Graph Pre-training and Prompt Tuning to Generalize Graph Neural Networks KDD22 推荐指数:#paper/⭐⭐# 动机 本文探讨了图神经网络(GNN)在迁移学习中“预训练-微调”框架的局限性及改进方向。现有方法通过预训练(…...
【Elasticsearch】Elasticsearch 的`path.settings`是用于配置 Elasticsearch 数据和日志存储路径的重要设置
Elasticsearch 的path.settings是用于配置 Elasticsearch 数据和日志存储路径的重要设置,这些路径在elasticsearch.yml配置文件中定义。以下是关于 Elasticsearch 的路径设置(path.data和path.logs)以及快照存储库配置的详细说明:…...
使用vue3+element plus 的table自制的穿梭框(支持多列数据)
目录 一、效果图 二、介绍 三、代码区 一、效果图 话不多说,先上图 二、介绍 项目需要:通过穿梭框选择人员信息,可以根据部门、岗位进行筛选,需要显示多列(不光显示姓名,还包括人员的一些基础信息&…...
学习笔记:IC存储总结(ROM,RAM, EEPROM, Flash, SRAM, DRAM, DDL)
一,概述 半导体存储器是一种可以存储大量二值信息的半导体器件。在电子计算机及一些其他的数字系统的工作过程中,需要对大量的数据进行储存。由于数据处理的数据量和运算速度的要求,因此把存储量和存取速度作为衡量存储器的重要指标。 在电子…...
本地部署pangolin获取谱系,从而达到预测新冠的流行趋势
步骤 1:安装Docker 注:此步骤忽略,可通过Docker官网对于文档进行安装,地址如下 Docker: Accelerated Container Application Developmenthttps://www.docker.com/ 步骤 2:拉取Pangolin镜像 docker pull staphb/pangolin:latest 步…...
【Python】文件File处理详细解释,附示例(文件操作、模式、编码、指针、调试、大文件处理、文件管理等)
文件 File 处理方法 1. 前言2. 文件基础操作2.1 文件打开与关闭2.2 with 语句(上下文管理器)3. 文件模式详解3.1 基础模式3.2 扩展模式4. 文件读写操作4.1 读取内容4.2 写入内容5. 文件指针和随机访问5.1 seek(offset.whence)5.2 二进制模式下的指针操作6. 文件编码处理6.1 指定…...
Windows 10/11 系统下 Git 的详细安装步骤和基础设置指南
以下是 Windows 10/11 系统下 Git 的详细安装步骤和基础设置指南: Windows 10/11 系统下 Git 的详细安装步骤和基础设置指南 一、详细安装步骤1. 下载 Git 安装包2. 运行安装程序1. 双击安装包,按以下选项配置:2. 点击 Install 完成安装。 二…...
RabbitMQ的四种交换机
RabbitMQ交换机 什么是RabbitMQ RabbitMQ 是一个开源的消息代理和队列服务器,用于在分布式系统中存储和转发消息。它基于 AMQP(高级消息队列协议)实现,支持多种消息传递模式,广泛应用于异步通信、应用解耦、负载均衡…...
探秘基带算法:从原理到5G时代的通信变革【一】引言
文章目录 一、引言1.1 研究背景与意义1.2 研究目的与方法1.3 研究内容与创新点 本博客为系列博客,主要讲解各基带算法的原理与应用,包括:viterbi解码、Turbo编解码、Polar编解码、CORDIC算法、CRC校验、FFT/DFT、QAMtiaozhi/解调、QPSK调制/解…...
ES中数据刷新策略refresh
在 Elasticsearch 中,插入数据时的 refresh 参数控制文档在写入后何时对搜索可见,其行为直接影响数据可见性和系统性能。以下是 refresh 参数的三个可选值(true、false、wait_for)的详细说明及适用场景: 1. refreshtr…...
【向量数据库Weaviate】 和Elasticsearch的区别
Weaviate 和 Elasticsearch 是两种不同类型的数据库,设计目标和应用场景有显著差异。以下是它们的核心区别和适用场景的详细对比: 1. 设计目标与核心能力 维度WeaviateElasticsearch核心能力向量数据库 图数据库(语义搜索优先)全…...
【Wireshark 02】抓包过滤方法
一、官方教程 Wireshark 官网文档 : Wireshark User’s Guide 二、显示过滤器 2.1、 “数据包列表”窗格的弹出过滤菜单 例如,源ip地址作为过滤选项,右击源ip->prepare as filter-> 选中 点击选中完,显示过滤器&#…...
【零基础到精通Java合集】第十五集:Map集合框架与泛型
课程标题:Map集合框架与泛型(15分钟) 目标:掌握泛型在Map中的键值类型约束,理解类型安全的键值操作,熟练使用泛型Map解决实际问题 0-1分钟:泛型Map的意义引入 以“字典翻译”类比泛型Map:明确键和值的类型(如英文→中文)。说明泛型Map的作用——确保键值对的类型一…...
三参数水质在线分析仪:从源头保障饮用水安全
【TH-ZS03】饮用水安全是人类健康的重要保障,其质量直接关系到人们的生命健康。随着工业化、城市化的快速发展,水体污染问题日益严峻,饮用水安全面临着前所未有的挑战。为了从源头保障饮用水安全,科学、高效的水质监测手段必不可少…...
Java8-Stream流介绍和使用案例
Java 8 引入了 Stream API,它提供了一种高效且声明式的方式来处理集合数据。Stream 的核心思想是将数据的操作分为中间操作(Intermediate Operations)和终端操作(Terminal Operations),并通过流水线&#x…...
FieldFox 手持射频与微波分析仪
FieldFox 手持射频与微波分析仪 简述 Keysight FieldFox 便携式分析仪可以在非常恶劣的工作环境中,轻松完成从日常维护到深入故障诊断的各项工作。 选择最适合您需求且有强大软件支持的 Keysight FieldFox 配置。 主要特性 特点: FieldFox 分析仪可…...