STL源码剖析
文章平均质量分 87
多学多看
InsaneDuck
学习记录
展开
-
chapter5 关联式容器:hashtable相关
目录1 hashtable1.1 概述1.1.1 线性探测1.1.2 二次探测1.1.3 开链1.2 hashtable的buckets和nodes1.3 hashtable的迭代器1.4 hashtable的数据结构1.5 hashtable的构造与内存管理1.5.1 插入与表格重整1.5.2 判知元素的落脚处(bkt_num)1.5.3 复制和整体删除1.5.4 应用实例1.6 hash functions2 hash_set3 hash_map4 hash_multiset&hash_mult原创 2021-06-02 13:18:17 · 134 阅读 · 0 评论 -
chapter5 关联式容器:树&红黑树
目录1 关联式容器2 树2.1 二叉树2.2 二叉搜索树2.3 平衡二叉搜索树2.4 AVL tree2.4.1 定义2.4.2 单旋转2.4.3 双旋转3 RB-tree(红黑树)3.1 特性3.2 插入节点3.3 一个由上而下的程序3.4 RB-tree的节点设计3.5 RB-tree的迭代器3.6 RB-tree的数据结构3.7 RB-tree的构造与内存管理3.8 RB-tree的元素操作3.8.1 元素插入3.8.2 元素的搜寻1 关联式容器所谓关联式容器,观念上类似关联式数据库(实际上则简原创 2021-05-27 22:38:51 · 140 阅读 · 0 评论 -
chapter4 序列式容器:slist
目录@[TOC](目录)1 概述2 slist的节点和迭代器3 slist的数据结构4 slist的元素操作1 概述STL list是个双向链表。SGI STL另提供了一个单向链表(single linked list),名为slist。它和list的主要区别在与slist的迭代器属于单向的Forward Iterator,后者的迭代器属于双向的Bidirectional Iterator。它和list的共同具有的一个特点:它们的插入、移除、接合等操作不会造成原有迭代器的失效。根据STL的习惯,插原创 2021-05-25 21:05:27 · 170 阅读 · 0 评论 -
chapter4 序列式容器:priority_queue
目录1 概述2 定义完整列表3 priority_queue没有迭代器4 示例1 概述priority_queue带有权值观念,其内的元素并非依照被推入的次序排列,而是自动依照元素的权值排列(通常权值以实值表示)。权值最高者,排在最前面。缺省情况下,priority_queue系利用一个max-heap完成,后者是一个vector表现的complete binary tree。max-heap可以满足priority_queue所需要的“依权值高低自动递增排序”的特性。2 定义完整列表prio原创 2021-05-25 19:23:19 · 95 阅读 · 0 评论 -
chapter4 序列式容器:heap
目录1 heap1.1 概述1.1.1 priority queue底层机制的选择分析1.1.2 binary heap1.1.3 heap的分类1.2 heap算法1.2.1 push_heap1.2.2 pop_heap1.2.3 sort_heap1.2.4 make_heap2 priority_queue2.1 概述2.2 定义完整列表2.3 priority_queue没有迭代器2.4 示例1 heap1.1 概述heap并不是归属于STL容器组件,它是个幕后英雄,扮演priority原创 2021-05-25 19:21:48 · 133 阅读 · 0 评论 -
chapter5 关联式容器:set与map
目录1 map的特性1 map的特性 所有元素会根据元素的键值自动被排序。 map的所有元素都是pair,同时拥有实值(value)和键值(key)。pair的第一元素被视为键值,第二元素被视为实值。 //pair定义template<class T1, class T2>struct pair { typedef T1 first_type; typedef T2 second_type; T1 first; ...原创 2021-05-17 21:35:13 · 72 阅读 · 0 评论 -
chapter4 序列式容器:stack&queue
目录1stack1.1 概述1.2 stack定义完整列表1.3 stack没有迭代器1.4 以list作为stack的底层容器2 queue2.1 概述2.3 queue没有迭代器2.4 以list作为queue的底层容器1stack1.1 概述stack是一种先进后出(First In Last Out, FILO)的数据结构。它只有一个出口。stack允许新增元素、移除元素、取得最顶端元素。但除了最顶端外,没有任何其他办法可以存取stack的其他元素。换言之,stack不允许遍历行为。pu原创 2021-04-23 22:18:57 · 80 阅读 · 0 评论 -
chapter4 序列式容器:deque
目录1 deque概述2 deque的中控器3 deque的迭代器3.1 迭代器结构3.2 迭代器操作4 deque的数据结构5 deque的构造与内存管理5.1 deque的构造5.2 push_back()与push_front()5.3 map的重新整治6 deque的元素操作6.1 pop_back()和pop_front()6.2 clear()6.3 erase()6.4 insert()1 deque概述vector是单向开口的连续线性空间,deque则是一种双向开口的连续线性空间。所谓双原创 2021-04-21 21:33:56 · 93 阅读 · 0 评论 -
chapter4 序列式容器:list
目录1 list1.1 与vector的区别1.2 list的节点1.3 list的迭代器1.3.1 list迭代器的设计1.4 list的数据结构1.5 list的构造与内存管理1.6 list的元素操作1.6.1 push_front()和push_back()1.6.2 erase()1.6.3 pop_front()和pop_back()1.6.4 clear()1.6.5 remove()1.6.6 unique()1.6.7 迁移操作transfer()1.6.8 接合操作splice()1.6原创 2021-04-20 20:12:18 · 115 阅读 · 0 评论 -
chapter4 序列式容器:vector
目录1 前言2 vector2.1 与array的区别2.2 vector的迭代器2.3 vector的数据结构2.4 vector的构造与内存管理2.4.1 定义data_allocator进行空间配置2.4.2 提供允许指定空间大小及初值的constructor2.4.3 push_back()2.5 vector的元素操作:pop_back,erase,clear,insert2.5.1 pop_back2.5.2 erase2.5.3 clear2.5.4 insert1 前言序列式容器:其中原创 2021-04-20 20:07:02 · 95 阅读 · 0 评论 -
chapter3 迭代器概念与traits编程技法
目录1 迭代器设计思维——STL关键所在2 迭代器是一种smart pointer3 迭代器相应型别(associated types)4 Traits编程技法——STL源代码门钥4.1 Partial Specialization(偏特化)的意义4.2 traits编程技法1 迭代器设计思维——STL关键所在STL的中心思想在于:将容器(containers)和算法(algorithms)分开,彼此独立设计,然后使用迭代器(iterators)将它们撮合在一起。可使用class template和原创 2021-04-08 19:30:24 · 112 阅读 · 0 评论 -
chapter2 空间配置器allocator
目录1 placement new2 配置器定义3 构造和析构的基本工具:construct和destory函数4 空间的配置与释放:std::alloc5 第一级配置器__malloc_alloc_template6 第二级配置器__default_alloc_template6.1 free-lists的节点构造(union联合体)6.2 自由链表free_list6.3 相关函数6.3.1 空间配置函数allocate()6.3.2 空间释放函数deallocate()6.3.3 重新填充free l原创 2021-04-07 21:21:10 · 78 阅读 · 0 评论 -
chapter1 概述
目录STL六大组件相关语法STL六大组件容器:各种数据结构,如vector,list,deque,set,map,用于存放数据。从实现的角度看,STL容器是一种class template。算法:常用算法如sort,search,copy,erase等。从实现的角度看,是一种function template。迭代器:扮演容器与算法之间的胶合剂,是所谓的“泛型指针”。从实现角度看,迭代器是一种将operator*, operator->, operator++, operator–原创 2021-04-06 22:09:16 · 453 阅读 · 0 评论