STL源码剖析总结

article/2025/9/14 0:43:19

STL源码剖析总结——使用c++标准库

前段时间学习了STL,今日开始复盘,整理下汇总,图片均引自侯捷STL源码剖析

GP(Generic Programming)泛型编程最成功的就是STL(Standard Template Library),以头文件形式呈现,所有的头文件都在std标准命名空间内

为了代码的复用性,建立数据结构和算法的一套标准,以泛型编程思维建立各个抽象概念(迭代器、容器),并加以系统化

SGI STL:

<stl_config.h>为让STL具备广泛移植能力,设置了一个环境组态文件,预设了许多常量

第一讲 使用c++标准库

1 概念

分配器给容器分配内存,我们就只需要像容器添加数据就好了

迭代器像一个泛化的指针

在这里插入图片描述

分配器不写就默认有一个

仿函数、容器、迭代器中都可能有适配器的使用
在这里插入图片描述

认识一下使用容器的复杂度,前提条件N要很大,几十万工业级的这种标准
在这里插入图片描述

2 结构性分类(各容器内存怎么使用的)

序列式容器:数据放进去是什么顺序就是什么顺序,遍历快

关联式容器:放进去进行排序,这种容器便于查找

红框是c++11新加入的

unorderd container未定序容器,其实就是关联式容器的一种,是由hashtable组成的

List是双向链表

forward-list是单向链表

在这里插入图片描述

3 array

ASIZE是容器的大小,有默认值50w

target是自己输入要查找的目标值

clock()是获取程序执行到当前行所用的时间 clock()-timestart就可以获取到具体几行之间执行的时间

array.data()是获取数组的首地址

qsort是排序,二分查找前必须要排序

在这里插入图片描述

4 vector

尽管push.back()是一个一个的放数据,但vector适配器扩充内存是两倍两倍的扩充每一次扩充都要找一块新的连续内存,然后把之前的数据移动多来

try catch 是用来抓取异常的发生,防止内存溢出

snprintf:将可变参数按照规定格式化成字符串,然后放到规定的字符数组中,图中是把10个rand()的随机数格式化成整型数(%d)放到buf中

在这里插入图片描述

比较find()和先排序在二分查找的时间快慢,最后结论是,二分查找不一定快

在这里插入图片描述

5 list

多了一个max.size(),即能存放的最多的数据大小

c++有全局标准库有sort(),一些容器内部也有自己的sort()

在这里插入图片描述

6 fordward_list

没有push.back,只有push。front

和slist一样用法

7 deque

每次扩充是一个buff(缓冲区),随机访问的迭代器。不提供函数可以得到迭代器,因为我们不能改变中间的值,即我们没办法用全局函数find()

8 stack queue 堆 栈

它其实就是deque的简化版本,可当作一个适配器

stack:先进后出

queue:先进先出

不提供iterator,因为一但提供就会改变先进后出这样的规则

在这里插入图片描述

9 multiset/set

multiset:可重复数据

无push.back,是在特定位置insert

安插慢,但是查找很快,用的红黑树数据结构

在这里插入图片描述

10 multimap/map

是有key得,即pair<int,string>

在这里插入图片描述

11 unordered_multiset/unorderd_multimap/set/map

用哈希表做数据结构的

也是用insert

篮子里面有链表,每个链表里的数据不确定的 。篮子数目>数据个数

引自侯捷STL源码剖析。


http://chatgpt.dhexx.cn/article/I8F5wFxM.shtml

相关文章

《STL源码剖析》总结

&#xfeff;&#xfeff; 转载自 &#xff1a;http://blog.csdn.net/liguohanhaha/article/details/52089914 1、STL概述 STL提供六大组件&#xff0c;彼此可以组合套用&#xff1a; 容器&#xff08;Containers&#xff09;&#xff1a;各种数据结构&#xff0c;如&#x…

STL源码剖析---红黑树原理详解上

转载请标明出处&#xff0c;原文地址&#xff1a;http://blog.csdn.net/hackbuteer1/article/details/7740956 一、红黑树概述 红黑树和我们以前学过的AVL树类似&#xff0c;都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡&#xff0c;从而获得较高的查找性能。不…

C++ STL源码剖析 笔记

写在前面 记录一下《C STL源码剖析》中的要点。 一、STL六大组件 容器&#xff08;container&#xff09;&#xff1a; 各种数据结构&#xff0c;用于存放数据&#xff1b;class template 类泛型&#xff1b;如vector, list, deque, set, map&#xff1b; 算法&#xff08;a…

STL(C++标准库,体系结构及其内核分析)(STL源码剖析)(更新完毕)

文章目录 介绍Level 0&#xff1a;使用C标准库0 STL六大部件0.1 六大部件之间的关系0.2 复杂度0.3 容器是前闭后开&#xff08;左闭右开&#xff09;区间 1 容器的结构与分类1.1 使用容器Array1.2 使用容器vector1.3 使用容器list1.4 使用容器foward_list1.5 使用容器slist1.6 …

STL源码详解

STL详解 STL介绍空间配置器一级空间配置器二级空间配置器 序列式容器vectorlistdeque 适配器stackqueueheappriority_queue 关联式容器setmultisetmapmultimap 非标准容器hash_set&#xff08;unordered_set&#xff09;hash_multiset&#xff08;unordered_multiset&#xff0…

STL源码刨析

1. STL概述 STL起源&#xff1a; 为的就是复用性的提升&#xff0c;减少人力资源的浪费&#xff0c;建立了数据结构与算法的一套标准。 STL所实现的、是依据泛型思维架设起来的一个概念结构。这个以抽象概念〔 abstract concepts&#xff09;为主体而非以实际类(classes&…

侯捷——STL源码剖析 笔记

侯捷——STL源码剖析 笔记 1.总览 1.STL六大部件之间的关系 在下图中&#xff0c;我们使用了如下&#xff1a; 1.一个容器vector 2.使用vector时&#xff0c;使用分配器分配内存 3.使用vi.begin(),vi.end()即迭代器&#xff0c;作为算法的参数 4.使用count_if算法 5.使用仿函…

【GeoServer】CentOS7.x上GeoServer的安装部署

GeoServer 是 OpenGIS Web 服务器规范的 J2EE 实现&#xff0c;利用 GeoServer 可以方便的发布地图数据&#xff0c;允许用户对特征数据进行更新、删除、插入操作&#xff0c;通过 GeoServer 可以比较容易的在用户之间迅速共享空间地理信息。 GeoServer 主要特性&#xff1a;兼…

部署GeoServer

部署GeoServer 部署方式很多总&#xff0c;这里介绍两种 安装包安装 默认已经安装了Tomcat&#xff1a; Tomcat9.0安装教程 下载war包 使用geoserver的war包在tomcat中部署&#xff0c;从官网中下载对应版本的war GeoServer官网地址 安装 解压软件 将war包复制到tomcat…

GeoServer安装部署

介绍&#xff1a; Geoserver 是一个开源的地理空间数据服务器,它可以发布和编辑地理数据。这里简单介绍 Geoserver 的部署安装和后台运行。 它的主要功能包括: 管理空间数据&#xff1a;GeoServer可以连接各种空间数据源,包括文件(SHP、CSV等)、数据库(PostGIS,Oracle,SQL Ser…

geoserver 创建只读用户

目录 一、创建只读角色 一、创建新账号&#xff0c;将新账号添加到只读角色中 三、配置权限 四、校验 一、创建只读角色 1、选择Security->Users,Groups,Roles->Roles->Add new role 2、输入名称&#xff0c;parent role 不选&#xff08;防止获取到父级角色的权限…

GeoServer学习笔记-01GeoSever运行编译

一、运行 1. 下载GeoServer GitHub仓库地址&#xff1a;https://github.com/geoserver/geoserver 2.本地代码工具打开项目 在idea里&#xff0c;文件->新建->来自现有的源代码项目&#xff0c;选择项目的pom文件加载项目。 3.idea编译环境设置 &#xff08;1&#xff09;…

java geoserver_本机搭建GeoServer

最近尝试试本机搭建GeoSrver的服务&#xff0c;分享一下搭建安装教程&#xff0c;总共分为以下几步&#xff1a; 下载Java的GDK&#xff0c;添加环境变量 GeoServer 依赖于Java的环境&#xff0c;劝告一定要下载 1.8(8)的版本&#xff0c;虽然现在已经更新到 14&#xff0c;但是…

Geoserver中跨域问题解决

场景 GeoServer简介、下载、配置启动、发布shapefile全流程(图文实践)&#xff1a; GeoServer简介、下载、配置启动、发布shapefile全流程(图文实践)_霸道流氓气质的博客-CSDN博客 上面安装Geoserver的基础下。 使用ajax请求GeoJson时提示跨域 注&#xff1a; 博客&#x…

GeoServer发布服务,中文标注乱码

1.问题&#xff1a; 发布的矢量数据源 shapefiles&#xff0c;中文标注显示乱码问题&#xff0c;如下图所示&#xff1a; 2.解决办法 编辑矢量数据源&#xff0c;DBF文件的字符集&#xff0c;改为GB2312。 显示正常&#xff1a;

geoserver热图

1.参考 GeoServer发布Heatmap - wenglabs - 博客园 Rendering Transformations — GeoServer 2.21.x User Manual 2.下载 GeoServer 及wps插件&#xff0c;该插件gs:heatmap支持热图样式 3.发布测试shp geoserver热图测试数据-其它文档类资源-CSDN下载 4、添加热图样式&…

Geoserver添加mongoDB数据源

文章目录 概述操作1. 添加mongodb 插件2. 添加数据源3. 添加数据3. 发布服务 概述 本文讲述如何在geoserver中添加mongoDB作为数据源&#xff0c;并发布图层。 操作 1. 添加mongodb 插件 在浏览器输入地址下载页面&#xff0c;下载mongodb插件。 [外链图片转存失败,源站可能…

Geoserver介绍2:geoserver页面介绍

目录 Geoserver介绍2&#xff1a;geoserver页面介绍 一、打开登录geoserver的web管理页面 二、 页面左侧&#xff0c;功能介绍 &#xff08;一&#xff09;、关于和状态 &#xff08;二&#xff09;、数据 1、图层预览 2、工作区 3、数据存储 4、图层 5、图层组 6、样…

geoserver

geoserver 总 —— 配置建议数据源选择QGIS配色相关透明度设置 安装配置Windowsjdk环境配置geoserver安装安装一体化包&#xff08;基于 jetty 推荐&#xff09;基于tomcat安装 Linux&#xff08;centos7.9&#xff09;基于 tomcat 安装 geoserver性能调优JVM内存调整启用 CORS…

geoserver离线地图服务搭建和图层发布

前言 项目用到了GIS地图&#xff0c;在浏览器进行展示。起初使用了在线的高德地图。高德官网api丰富&#xff0c;且都是中文&#xff0c;很好用&#xff0c;也很方便。但是随着需求的变更&#xff0c;项目环境也从互联网变成了内网环境。所以高德地图就不能再用了&#xff0c;…