《STL源码剖析》阅读总结
对《STL源码剖析》阅读总结,梳理知识点。
奔跑的哇牛
这个作者很懒,什么都没留下…
展开
-
【STL】deque(七)
vector是单向开口的连续线性空间,deque则是一种双向开口的连续线性空间。如图1图1deque与vector的差异:deque允许于参数时间内对起头端进行元素的插入或移除操作。deque没有所谓容量(capacity)概念,因为deque是动态地以分段连续空间组合而成。deque也提供了Ramdon Access Iterator,但它的迭代器并不是普通的指针,比vector复...原创 2019-11-03 12:34:21 · 380 阅读 · 1 评论 -
【STL】list(六)
相对于vector的连续线性空间,list是非线性非连续空间,虽然会复杂一些,但是每次插入或者删除一个元素,只是配置或释放一个元素空间,而且对任何位置的元素插入或移除,list都是常数操作时间。【节点结构】list本身和list的结点是不同结构,需分开设计。结点结构:template <class T>struct __list_node{ typedef void* ...原创 2019-10-20 19:44:52 · 203 阅读 · 0 评论 -
【STL】 SGI空间配置器(二):第一级配置器
对SGI空间配置器的背景介绍可参考此篇博文,空间配置器背景介绍。这篇主要总结下SGI空间配置器的第一级配置器。一、源码剖析#if 0# include <new># define __THROW_BAD_ALLOC throw bad_alloc#elif !defined(__THROW_BAD_ALLOC)# include <iostream.h&...原创 2019-08-18 17:37:12 · 323 阅读 · 0 评论 -
【STL】 SGI空间配置器(一):介绍
先看一段伪代码class Foo{...};Foo* pf = new Foo; //配置内存,然后析构对象delete pf; //将对象析构new算式内含两阶操作:调用::operator new 配置内存。调用Foo::Foo()构造对象内容。delete算式也内含两阶操作:调用Foo::~Foo()将对象析构。调用::operator delete 释放内存。...原创 2019-08-18 12:14:23 · 383 阅读 · 1 评论 -
【STL】 SGI空间配置器(三):第二级配置器
对第一级配置的介绍可点此第一级配置器。接下来介绍下第二级配置器。一、介绍1.1 问题我们在申请内存后,系统都要分配对应的空间来管理这些空间,如下图,如果申请的内存块很小,相对的这些管理内存的空间是越浪费的。第二级配置器多了一些机制,避免上述问题造成的内存碎片。1.2 解决方法第二级配置器对内存的申请办法:1、如果申请的内存块够大,超过超过128bytes,则移交给第一级配置器。...原创 2019-08-26 23:48:39 · 438 阅读 · 0 评论 -
【STL】迭代器与Traits编程技法(四)
一、概念迭代器(iterators)是一种抽象的概念,设计模式中的迭代器模式定义如下:提供一种方法,使之能够依序巡访某个聚合物(容器)所含的各个元素,而又无需暴露该聚合物的内部表达方式。STL的中心思想在于:将数据容器和算法分开,彼此独立设计,最后再以一贴胶着剂将它们撮合在一起。而迭代器就是这个胶着剂。为了不暴露容器内部的表达方式,将迭代器的开发工作交给每个容器的设计者,如此一来,所有的实现...原创 2019-09-14 13:06:41 · 355 阅读 · 0 评论 -
【STL】vector(五)
一、概述vector的数据安排及操作方式与array很相似,二者唯一差别在于空间运用的灵活性。array是静态空间,一旦配置了大小,就不能改变,要换个大或者小点的空间,得有客户端自己来操作。vector是动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新元素。vector相对于array来说就是可以自己内部进行内存的动态缩减,vector这种操作有有点也有缺点。【优点】v...原创 2019-10-07 16:50:09 · 284 阅读 · 0 评论