IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> STL学习笔记(一)---概述 -> 正文阅读

[系统运维]STL学习笔记(一)---概述

STL提供了六大组件,彼此之间可以用组合套用,分别是容器、算法、迭代器、适配器与空间配置器。
容器:各种数据结构,如vector、 list、 deque、 set、 map等,用来存放数据,从实现角度来看,STL容器是一种class template。
算法:各种常用的算法,如sort、 find、 copy、 for_ each,从实现的角度来看,STL算法是一种function template。
迭代器:扮演了容器与算法之间的胶合剂,是所谓的“泛型指针”,共有五种类型,从实现角度来看,迭代器是一种operator*, operator->, operator++, operator--?等指针相关操作予以重载的class template,所有STL容器都附带有自己专属的迭代器,只有容器的设计者才知道如何遍历自己的元素。原生指针也是一种迭代器。是设计模式的一种
仿函数:仿函数(functor),就是使一个类的使用看上去像一个函数。其实现就是类中实现一个operator(),这个类就有了类似函数的行为,就是一个仿函数类了。从实现角度来看,仿函数是一种重载了operator()的class或者class template。
适配器: 一种用来修饰容器或者仿函数或迭代器接口的东西。对于实现而言,配接器是使用已经实现好的容器去提供新的接口,比如stl中的栈的实现,根本就是个接口转发。配接器提供接口更加灵活,比如queue和stack,看着像容器,其实就是deque包了一层皮。
空间配置器:负责空间的配置与管理,从实现角度看,配置器是一个实现了动态空间配置、空间管理、空间释放的class template。
交互关系:容器通过空间配置器取得数据存储空间,算法通过迭代器存储容器中的内容,仿函数可以协助算法完成不同的策略的变化,适配器可以修饰仿函数。

一、容器

????????根据“数据在容器中的排列”特性,容器可概分为序列式(sequence) 和关联式(associative)两种。
????????标准的STL关联式容器分为set (集合)和map (映射表)两大类,以及这两大类的衍生体multiset (多键集合)和multimap (多键映射表) .这些容器的底层机制均以RB-tree (红黑树)完成. RB-tree也是一-个独立容器,但并不开放给外界使用。
????????此外,SGI STL还提供了一个不在标准规格之列的关联式容器: hash table(散列表) ,以及以此hashtable为底层机制而完成的hash_ set (散列集合)、hash_ map ( 散列映射表)、hash. multiset ( 散列多键集合)、hash. multimap(散列多键映射表) 。
????????所谓关联式容器,观念上类似关联式数据库(实际上则简单许多):每笔数据(每个元素)都有一个键值(key) 和一个实值(value) 。当元索被插人到关联式容器中时,容器内部结构(可能是RB- tree,也可能是hash-table)便依照其键值大小,以某种特定规则将这个元素放置于适当位置.关联式容器没有所谓头尾(只有最大元素和最小元素),所以不会有所谓push_ back().、push_ front()、
pop_ back().、pop_ front().、begin()、end() 这样的操作行为.?
????????一般而言, 关联式容器的内部结构是一个balanced binary tree(平衡二叉树),以便获得良好的搜寻效率。balanced binary tree有许多种类型,包括AVL-tree、RB-tree、?AA-tree,其中最被广泛运用于STL的是RB-tree (红黑树)。

1.vector:底层数据结构为数组 ,支持快速随机访问。
2.list:底层数据结构为双向链表,支持快速增删。
3.deque:底层数据结构为一个中央控制器和多个缓冲区,详细见STL源码剖析P146,支持首尾(中间不能)快速增删,也支持随机访问。
4.stack:底层一般用23实现,封闭头部即可,不用vector的原因应该是容量大小有限制,扩容耗时
5.queue:底层一般用23实现,封闭头部即可,不用vector的原因应该是容量大小有限制,扩容耗时(stack和queue其实是适配器,而不叫容器,因为是对容器的再封装)
6.priority_queue:的底层数据结构一般为vector为底层容器,堆heap为处理规则来管理底层容器实现
7.set:底层数据结构为红黑树,有序,不重复。
8.multiset:底层数据结构为红黑树,有序,可重复。?
9.map:底层数据结构为红黑树,有序,不重复。
10.multimap:底层数据结构为红黑树,有序,可重复。
11.hash_set:底层数据结构为hash表,无序,不重复。
12.hash_multiset:底层数据结构为hash表,无序,可重复 。
13.hash_map :底层数据结构为hash表,无序,不重复。
14.hash_multimap:底层数据结构为hash表,无序,可重复。?
15.unordered_set:底层数据结构为hash表,无序,不重复。
16.unordered_multiset:底层数据结构为hash表,无序,可重复 。
17.unordered_map :底层数据结构为hash表,无序,不重复。
18.unordered_multimap:底层数据结构为hash表,无序,可重复。?

?unorderd_系列是约等于hash_系列的,最初的 C++ 标准库中没有类似 hash_map 的实现,但不同实现者自己提供了非标准的 hash_map。 因为这些实现不是遵循标准编写的,所以它们在功能和性能保证方面都有细微差别。从 C++ 11 开始,hash_map 实现已被添加到标准库中。但为了防止与已开发的代码存在冲突,决定使用替代名称 unordered_map。这个名字其实更具描述性,因为它暗示了该类元素的无序性。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-10-06 12:37:31  更:2021-10-06 12:38:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 18:43:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码