STL源码学习
延禾xy
个人学习记录及思考。专注当下,停止焦虑。
展开
-
SGI的内存管理
在SGI中, 其内存分配把这两步独立出了两个函数:allocate 申请内存,construct 调用构造函数,分别在<stl_alloc.h>, <stl_construct.h> 中。在stl_construct.h中定义了两个全局函数construct()和destroy()来管理构造和析构。原创 2016-07-10 11:39:56 · 1666 阅读 · 0 评论 -
迭代器概念及traits编程技法.md
前言迭代器作为一个抽象概念,在程序设计中并没有直接对应于这个概念的实物。在设计模式中,iterator模式定义为:提供一种方法,能使之依序巡防某个容器所含元素,而无须暴露该容器的内部表达方式。3.1 迭代器设计思维–STL关键所在STL的核心思想:将容器和算法分离,彼此独立设计,然后用迭代器将两者撮合。3.2 迭代器是一种智能指针指针最常见的行为是内容提领(derefence)和成员访问(membe原创 2017-08-29 15:26:15 · 442 阅读 · 0 评论 -
STL queue
1、queue概述queue是一种先进先出的数据结构,queue除了最底端可以加入和最顶端可以取出元素外,没有其他办法存取queue的元素2、queue定义完整列表queue以deuque为缺省的底部结构。#ifndef __STL_LIMITED_DEFAULT_TEMPLATEStemplate <class T, class Sequence = deque<T> >#elsetempl原创 2016-07-27 09:34:09 · 285 阅读 · 0 评论 -
STL的stack
1、stack概述stack是一种先进后出的数据结构,形式如下图 将元素推入stack为push,将元素推出stack为pop.2、stack定义完整列表SGI STL以deque为缺省的情况下的stack底部容器。#ifndef __STL_LIMITED_DEFAULT_TEMPLATEStemplate <class T, class Sequence = deque<T> >#else原创 2016-07-27 09:33:34 · 284 阅读 · 0 评论 -
STL deque
1、deque概述deque是一种双向开口的连续线性空间。所谓双向开口,意思是可以在头尾两端分别做元素的安插和删除动作,如图 vector 当然也可以在头尾两端做动作(从技术观点),但是其头部动作效率奇差,无法被接受。 没有所谓容量(capacity)观念,因为它是动态以分段连续空间组合而成,随时可以增加㆒段新的空间并链接起来。换句话说,像 vector 那样「因旧空间不足而重新配置一块更大原创 2016-07-27 09:31:29 · 471 阅读 · 0 评论 -
STL 迭代器概念及traits编程技法
前言迭代器作为一个抽象概念,在程序设计中并没有直接对应于这个概念的实物。在设计模式中,iterator模式定义为:提供一种方法,能使之依序巡防某个容器所含元素,而无须暴露该容器的内部表达方式。3.1 迭代器设计思维–STL关键所在STL的核心思想:将容器和算法分离,彼此独立设计,然后用迭代器将两者撮合。3.2 迭代器是一种智能指针指针最常见的行为是derefence和member acess,因此迭原创 2016-07-27 09:26:10 · 415 阅读 · 0 评论 -
STL函数:static void (* set_malloc_handler(void (*f)()))()分析
STL函数:static void (* set_malloc_handler(void (*f)()))()分析在阅读《STL源码剖析》的时候遇到一个函数static void (*set_malloc_handler(void (*f)()))()原创 2016-06-09 14:55:17 · 2258 阅读 · 2 评论 -
STL list
1.list概述list每插入或删除一个元素就申请或释放一个元素空间。2. list的结点template <class T>struct __list_node { typedef void* void_pointer; void_pointer next; //后继 void_pointer prev; //前驱 T data; //数据原创 2016-07-27 09:22:01 · 613 阅读 · 0 评论 -
STL power() 计算一个数的n次幂
计算一个数的n次幂STL计算x的n次幂的函数实现原理:用非递归的二分法 比如x^29 = x^1 * x^4 * x^8 * x^16;29 = (11101)B也就是把指数转换为二进制的数,然后从低位到高位依次相乘即可。时间复杂度为O(logn)。为了避免低位很多零的情况,先过滤低位的0 源码如下:template <class T, class Integer, class MonoidO原创 2016-07-27 09:20:55 · 920 阅读 · 0 评论 -
STL hashtable
在数据结构中我们知道,有种数据结构的插入、删除、查找等操作的性能是常数时间,但需要比元素个数更多的空间,这种数据结构就是哈希表。哈希表的基本思想是,将数据存储在与其数值大小相关的地方,比如对该数取模,然后存储在以余数为下表的数组中。但这样会出现一个问题,就是可能会有多个数据被映射到同一个存储位置,即出现了所谓的“碰撞”。哈希表的主要内容就是解决“碰撞”问题,一般而言有以下几种方法:线性探测、二次探测、开链等。转载 2016-07-27 09:17:22 · 387 阅读 · 0 评论 -
STL内存处理工具
STL内存处理工具STL定义了5个全局函数,作用在未初始化的空间上。 1. construct() 2. destroy() 3. uninitialized_copy() 4. uninitialized_fill() 5. uninitialized_fill_n()construct()与destroy()见SGI内存管理http://blog.csdn.net/charles1e/原创 2016-07-10 15:24:49 · 362 阅读 · 0 评论 -
STL的vector
1.容器的概念和分类STL容器是将基本的数据结构实现出来。根据数据在容器中的排列,分为序列式容器和关联式容器。 SGI的各种容器如下图: 1.1 序列式容器所谓序列式容器,其中的元素都可序(ordered),但未排序(sorted)。C++ 语言本身提供了㆒个序列式容器 array,STL 另外再提供 vector , list , deque ,stack , queue , priority原创 2016-07-11 09:20:55 · 328 阅读 · 0 评论