代码改变世界

随笔分类 -  STL

hash 知多少

2011-08-26 17:34 by curer, 958 阅读, 收藏, 编辑
摘要: 在应用程序中,常常需要将一个集合U(键值集合)和另一个集合T(数据集合)建立关系构造dictionary结构,来达到增删查改的需求。如果键值集合很小,那么可以直接采用Direct-address tables的方式实现。假如我们的集合 U = {0, 1, ..., m - 1}, 而且m并不大。如果我们的键和值对应唯一,那么我们可以通过构造一个大的数组来保存集合U,如下结构。显然,当集合U增大,那么直接存储集合U变的不那么明智起来,而且,如果使用键的集合K变小是,我们浪费的空间也越来越大。当集合K比集合U小很多的时候,就是hash粉墨登场的时候了。hash将保存空间压缩到集合K的大小,并且控 阅读全文

SGI STL 学习笔记四 内存管理

2011-01-17 20:56 by curer, 992 阅读, 收藏, 编辑
摘要: SGI STL 在g++中默认的编译选项是构造2个分配器。 第一级分配器__malloc_alloc_template 这个一级分配器设计比较简单。由于SGI STL中分配内存没有使用C++推荐的 operator new/delete 而是使用malloc/delete。所以,并没有set_new_handler()。当面对内存不足的情况,这里模仿了c++的做法。 二级分配器 __default_alloc_template二级配置器多了很多机制,在分配小的内存上做了优化。 粗略的分配策略。 分配大小超过 _MAX_BYTES = 128bytes,使用一级分配器处理。当分配器大小小于128 阅读全文

SGI STL 学习笔记三 heap

2011-01-08 22:18 by curer, 1933 阅读, 收藏, 编辑
摘要: heap,大家都非常了解。大学学的时候必须会的内容,要不考试很难过关。只是当时并没有学习明白。只是被老师和考试强了。完全是机械的记忆。觉得真是太对不起自己这个专业了。最近再看STL,也就有了这一篇老生重弹。 在很多情况下,我们非常关心一个集合中的最大元素。并希望能够从集合中最快速度找到并删除。为了整体的效率,我们需要在这个集合中插入元素,查找最大元素,删除最大元素能够综合最快。使用binary heap便是一种不错的选择之一。而且能够在O(logN)插入,删除元素,查找最大元素在常数时间下。   Binary heap 是一种complete binary tree(完全二叉树)。所以我们可以 阅读全文

SGI STL 学习笔记二 vector

2011-01-01 11:06 by curer, 951 阅读, 收藏, 编辑
摘要: sequence containersArrayVectorHeapPriority_queueListsList(not in standard)DequeStackQueueSequence Containers 其中的元素 都是可序的(ordered),但并不一定有序(sorted)。STL 中有vector ,list ,deque,stack,queue,priority_queue等序列容器。Stack queue 由于只是将deque重新封装而成,在技术上被归类为一种配接器(adapter)。 VectorVector 的数据为动态空间,随着元素的加入。内部会通过机制自行扩充空间 阅读全文

SGI STL 学习笔记一 Iterator

2010-12-31 19:08 by curer, 754 阅读, 收藏, 编辑
摘要: 之前一直希望能够看STL源代码,因为他一直存放在我的硬盘深处。但是由于复杂性,我一直再绕。而且纠结的是,我一直推荐我的学弟去研读STL。由于最近的工作需要,使我不得不一看STL的究竟。当然,STL对我来说依然是太庞大了,有相当多的相关的基础知识的缺乏导致整个过程实在是太艰难了,直到我看到了《SGI STL 源码剖析》。之后我的很多例子其实就是这本书的源代码。真的,这又是一本经典的著作。这本书贯穿了我整个STL的学习。当然,如果你之前研读过《inside c++ object model》等经典C++教材。你会发现。整个知识开始网罗了。  按照道理来讲,学习STL,实在是不能不从总图开始。但是S 阅读全文
点击右上角即可分享
微信分享提示