C++ STL
对C++ STL的源码进行深度剖析,适合与侯捷的《stl源码剖析》一起看。
源码面前,了无秘密。
MoreWindows
微软最有价值专家 电子科技大学优秀研究生 CSDN博客专家
展开
-
STL系列十一 随机三趣题——随机重排,文件中随机取一行,生成N个随机数。
本文将介绍三个有趣的随机问题,分别是随机重新排列、从文件中随机取一行数据、生成N个随机数。 一.随机重新排列将一个序列打乱并对其进行随机的重新排列,关键在于每种序列的被选择概率要一样,不然有失“公平”。现在让我们来寻找如何保证每种序列被选择的概率一样大的算法。首先假设这个数组只有二个元素,设数组a为{1, 2},显然这个数组只有二种可能的排列,要么是{1,2}要么是{2,1}。很容易想到一种方法—原创 2012-06-24 23:28:48 · 20873 阅读 · 19 评论 -
STL系列之十 全排列(百度迅雷笔试题)
全排列在笔试面试中很热门,因为它难度适中,既可以考察递归实现,又能进一步考察非递归的实现,便于区分出考生的水平。所以在百度和迅雷的校园招聘以及程序员和软件设计师的考试中都考到了,因此本文对全排列作下总结帮助大家更好的学习和理解。对本文有任何补充之处,欢迎大家指出。首先来看看题目是如何要求的(百度迅雷校招笔试题)。用C++写一个函数, 如 Foo(const char *str), 打印出 str原创 2012-03-21 09:35:32 · 111065 阅读 · 120 评论 -
STL系列之九 探索hash_set
Title: STL系列之九 探索hash_setAuthor: MoreWindowsBlog: http://blog.csdn.net/MoreWindowsE-mail: morewindows@126.comKeyWord: C++ STL set hash_set 哈希表 链地址法 本文将着重探索hash_set比set快速高效的原因,阅读原创 2012-03-08 11:52:11 · 42713 阅读 · 39 评论 -
STL系列之八 slist单链表
微软的VS208所使用的PJ STL(注1)中的list是双链表,但在某些场合,一个轻量级的单链表会更加合适。单链表非常常见,这里就不去细说了,本文的slist(single linked list)单链表实现了链表的基本功能,如有需要,以后还会扩充的。slist单链表(带头结点)的示意图如下所示:完整的C++代码如下://带头结点的单链表 //by MoreWindows( http:/原创 2012-01-09 09:54:37 · 16444 阅读 · 17 评论 -
STL系列之七 快速计算x的n次幂 power()的实现
计算x的n次幂最简单直接的方法就是相乘n次,很容易写出程序://计算x^n 直接乘n次 by MoreWindows( http://blog.csdn.net/MoreWindows )int power1(int x, unsigned int n){ int result = 1; while (n--) result *= x; return result;}这种计算的效率原创 2012-01-04 10:33:25 · 24247 阅读 · 31 评论 -
STL系列之六 set与hash_set
STL系列之六 set与hash_setset和hash_set是STL中比较重要的容器,有必要对其进行深入了解。在STL中,set是以红黑树(RB-tree)作为底层数据结构的,hash_set是以Hash table(哈希表)作为底层数据结构的。set可以在时间复杂度为O(logN)情况下插入、删除和查找数据。hash_set操作的时间复杂度则比较复杂,这取决于哈希函数和哈希表的负载情况。下面原创 2011-12-01 09:49:56 · 40086 阅读 · 50 评论 -
STL系列之五 priority_queue 优先级队列
priority_queue 优先级队列是一个拥有权值概念的单向队列queue,在这个队列中,所有元素是按优先级排列的(也可以认为queue是个按进入队列的先后做为优先级的优先级队列——先进入队列的元素优先权要高于后进入队列的元素)。在计算机操作系统中,优先级队列的使用是相当频繁的,进线程调度都会用到。在STL的具体实现中,priority_queue也是以别的容器作为底部结构,再根据堆的处理规则原创 2011-11-16 12:39:00 · 56547 阅读 · 23 评论 -
STL系列之四 heap 堆
下面再介绍STL中与堆相关的4个函数——建立堆make_heap(),在堆中添加数据push_heap(),在堆中删除数据pop_heap()和堆排序sort_heap():头文件 #include 下面的_First与_Last为可以随机访问的迭代器(指针),_Comp为比较函数(仿函数),其规则——如果函数的第一个参数小于第二个参数应返回true,否则返回false。建立堆make_heap(原创 2011-11-14 01:16:13 · 72303 阅读 · 25 评论 -
STL系列之三 queue 单向队列
queue单向队列与栈有点类似,一个是在同一端存取数据,另一个是在一端存入数据,另一端取出数据。单向队列中的数据是先进先出(First In First Out,FIFO)。在STL中,单向队列也是以别的容器作为底部结构,再将接口改变,使之符合单向队列的特性就可以了。因此实现也是非常方便的。下面就给出单向队列的函数列表和VS2008中单向队列的源代码。单向队列一共6个常用函数(front()、ba原创 2011-11-09 09:20:10 · 70001 阅读 · 12 评论 -
STL系列之二 stack栈
栈(statck)这种数据结构在计算机中是相当出名的。栈中的数据是先进后出的(First In Last Out, FILO)。栈只有一个出口,允许新增元素(只能在栈顶上增加)、移出元素(只能移出栈顶元素)、取得栈顶元素等操作。在STL中,栈是以别的容器作为底部结构,再将接口改变,使之符合栈的特性就可以了。因此实现非常的方便。下面就给出栈的函数列表和VS2008中栈的源代码,在STL中栈一共就5个原创 2011-11-09 09:03:29 · 63058 阅读 · 17 评论 -
STL系列之一 deque双向队列
deque双向队列是一种双向开口的连续线性空间,可以高效的在头尾两端插入和删除元素,deque在接口上和vector非常相似,下面列出deque的常用成员函数: deque的实现比较复杂,内部会维护一个map(注意!不是STL中的map容器)即一小块连续的空间,该空间中每个元素都是指针,指向另一段(较大的)区域,这个区域称为缓冲区,缓冲区用来保存deque中的数据。因此deque在随机访问和遍历数原创 2011-11-08 09:52:01 · 131744 阅读 · 19 评论