
仿写STL
文章平均质量分 86
a_1_2_ab
这个作者很懒,什么都没留下…
展开
-
空间配置器实现
STL容器可以保存任何C++语言支持的基本类型、用户自定义类型的对象。容器本身只是实现了一种数据结构,对用户数据进行管理。用户数据最终都是保存在内存中的,那么内存的申请、释放工作是由“空间配置器”承担的。标准c++中都提供了std::allocator类。 当容器中保存的是用户自定义类型数据时,有的数据类型结构简单,占用的空间小;而有的数据类型结构复杂,需要的内存空间大。有的应用程序,原创 2014-04-04 10:54:21 · 1322 阅读 · 0 评论 -
STL源码学习总结及项目下载地址
从开始看STL源码到今天差不多有一个月的时间了,在这研读STL源码过程中确实学习到了很多,深深被大师们的设计思想所打动。其中使用迭代器的思想是其STL的最大的亮点,通过泛型编程,是得所有的容器对外都提供统一的访问接口,而屏蔽掉了各个容器底层实现的细节。相对了面向对象的编程,泛型编程同样能够实现多态的功能,而且还具有更高的安全性以及效率,因为泛型编程就是编译期间就已经决定了变量的类型。原创 2014-04-29 09:45:32 · 3355 阅读 · 0 评论 -
map容器设计
在红黑树基础上设计map容器,在设计map时,可以明显利用的map模板类中KEY,VALUE,KEYOFVALUE的灵活运用不多说,代码如下://my_map.h#ifndef MY_MAP_H_INCLUDED#define MY_MAP_H_INCLUDED#include //for pair#include"my_rb_tree.h"using std::pair;原创 2014-04-29 09:16:14 · 1043 阅读 · 0 评论 -
set容器的实现
set容器是以红黑树容器为基础实现的,在其基础上稍加改变接口即可#ifndef MY_SET_H_INCLUDED#define MY_SET_H_INCLUDED#include"my_rb_tree.h"namespace juine{ template struct identity { const T& operator()(cons原创 2014-04-28 20:30:11 · 1107 阅读 · 0 评论 -
红黑树容器实现(带迭代器)
上一篇文章是纯粹地实现了红黑树,但是在STL中,红黑树容器是需要迭代器实现的。故将上一篇文章改进后实现红黑树容器。#ifndef ITERATOR_RB_TREE_H_INCLUDED#define ITERATOR_RB_TREE_H_INCLUDED#include"my_iterator_base.h"/***iterator_rb_tree.h红黑树地泛型容器地迭代器与原创 2014-04-28 09:57:25 · 1722 阅读 · 0 评论 -
红黑树的实现
在写完线性容器以后,再来看关联性容器。在关联性容器中,set,map容器都是基于红黑树而实现的,故花了几天时间写下来红黑树的代码。其原理可以参考算法导论。在写过程中也参照了网上别人写的代码。其代码实现如下:#includeusing namespace std;//红黑树class RB_Tree{private: enum COLOR{RED,BLACK}; cl原创 2014-04-25 16:08:49 · 1222 阅读 · 0 评论 -
迭代器实现
设计模式--迭代器iterator我们知道STL两个主要内容就是容器(containers)和算法(algoritms),两者是分开设计的。关于各自独立的实现,c++中的class template和function template能很好的完成这个目标。而将两者胶合起来,则需要iterator的帮助。这就使得iterator成了STL设计中重要的一环。迭代器是一种抽象的设计概念,《设计模原创 2014-04-08 11:00:50 · 1560 阅读 · 0 评论 -
从头到尾实现deque
关于deque内部数据结构的说明:deque是能够同时在收尾进行插入和删除的数据结构。其表现形式看起来和vector差不多,但是在处理队头插入时,其表现的时间复杂度要远远地优越于vector。这个得益于deque的内部数据结构地实现。deque使用分段的连续空间组成。为了管理这个分段的连续空间,所以必须要有一个中控器来记录各个分段空间的首地址,然后需要一个长度来记录该中控器的大小。为了表现原创 2014-04-20 11:07:31 · 1492 阅读 · 1 评论 -
list容器的实现
今天把List容器给实现了一遍。List容器的实现应该来说是比较简单的,以前学习C语言的时候就已经是实现过这个数据结构,这次主要是要与STL中的东西相互结合,比如,内存管理使用自己写的空间配置器,然后使用迭代器来封装其中的指针。在写LIST容器时候,我将代码的整体结构做了很大改动,与前面的有点不同,以前不同的就先不改了,等以后将所有容器实现后,会将所有代码放上面来。/*** iter原创 2014-04-17 15:43:54 · 1084 阅读 · 0 评论 -
从头到尾实现vector
在实现vector容器之前,我们要先了解STL中的各大组件之前的关系:从图片中,我们可以看出vector容器是基于空间配置器和迭代器的基础上实现的。用过STL都知道,每一个容器都有自己的专属迭代器,然后这些容器都有相同之处,也有不同之处。因此我们只需要每个容器的迭代器都继承同一个迭代器的基类,去实现我们各自的迭代器。下面首先实现的就是迭代器,在STL源码剖析这个书中,vector迭代器原创 2014-04-15 09:12:23 · 1152 阅读 · 0 评论