STL_造轮子才是程序员最大的浪漫
文章平均质量分 79
小键233
生活才是我的职业,而程序员,那只是我的副业
==
展开
-
STL(一):allocator 空间配置器
大概…………很久很久以前,我做了一个浪(er)漫(bi)的决定,就是自己也实现一个STL,毕竟造轮子呀,才是最浪漫的不是吗。于是,山很高,海很深,浪花一浪接一浪,我义无反顾走上了作死之路。 nice ,作死之路的第一部分,就是关于allocator,空间配置器的。STL 有自己的内存管理,其中最最基础的就是allocator ,任何内存的请求和释放都要经过它。它本质上就是封装了一下malloc 和原创 2016-05-24 20:49:54 · 466 阅读 · 0 评论 -
STL(二):construct 与 destroy
STL 中关于对象的构造和销毁是使用construct 和 destroy 函数 的。 这个内容写在文件stl_construct.h 中。_type_traits在讲主题之前,有必要介绍一个_type_traits 与若干概念。 简单而言,这个类的作用就是萃取出我们需要的各种内容。它的模板代码如下://POD 的意思是:Plain Old Data ,即标量型或传统的C struct 型别原创 2016-05-24 21:14:20 · 935 阅读 · 1 评论 -
STL(三):vector
一和二中吧STL 的基础都说明白了,那我们尝试着实现一下第一个容器:vector (好敷衍呀~)vector 算是比较简单的一种容器了,但饶是如此,我都写了好久(主要是其他的各种函数费时间)准备工作在直接开始说vector 的时候的时候,我会假设你懂得以下函数的运用(最好自己去实现一下吧)uninitialized_copyuninitialized_copy_nuninitialized_原创 2016-05-25 09:13:07 · 3611 阅读 · 0 评论 -
STL(四):list
STL 中的list 可以说是与vector 相对应的一个容器。 什么意思呢? 嗯,在我看来,vector 是线性表,空间连续,它的特点是原生指针作为它的迭代器,支持随机存取。但是插入和删除的操作代价高,并且有可能有一部分空间被浪费。 list 是链表,空间不连续,它的特点是对空间利用率高,插入和删除数据是常量时间,但是不支持随即存取,并且每个节点都需要浪费掉额外的两个指针的内存空间(不要忽视原创 2016-05-27 16:39:11 · 1363 阅读 · 0 评论 -
STL(五):连续空间的二维数组实现
这个不属于STL 中的内容,仅是个人补充使用嘛~一开始是这样的。 加入我们需要新建一个二维数组,一般像下面这样用:int row = 2, col = 3;int array[2][3]; //1//orvector< vector<int> > v(row, vector<int>(col) );//2//or int* array = new int[row*col];//3//or原创 2016-05-31 10:56:30 · 1567 阅读 · 0 评论 -
STL(六):deque
隔了好多天,终于把这个deque 给写了。deque 是双端队列。也就是,方便在队头和队尾插入数据的队列。 它能够解决vector 增加元素时不停地重新分配内存和在头部插入效率低下的问题。看到它的数据结构才觉得真心厉害。数据结构看图 deque的数据组织是这样的: 有一块连续的小内存充当中控器,指向真正的数据缓冲区。有点像一本书的目录。 而数据,真正是存储在缓冲区的。 deque 主要是维原创 2016-07-24 12:04:17 · 462 阅读 · 0 评论 -
STL(七):stack 与 queue
好久没有写过新的内容了。主要是最近真的没有时间。好吧,这次介绍一下栈与队列的内容。stack先理一下之前写过的容器:vectordequelist这些都是序列式容器,但是使用了不同的数据结构来实现。栈的特性,就是先进后出(或者后进先出) 一般来说,我们可以使用上面的容器来实现栈。事实上,当你看到STL 中的设计时,才感叹,真是一种绝美的设计啊。这次先从原创 2016-10-01 22:52:40 · 423 阅读 · 0 评论