STL系列

STL系列的相关文章

《STL系列》之map原理及实现

上一篇文章<STL系列>之vector原理及实现,介绍了vector的原理及实现,这篇文章介绍map的原理及实现.STL实现源码下载.STL中map的实现是基于RBTree的,我在实现的时候没有采用RBTree,觉得这东西有点复杂,我的map采用的是排序数组(CSortVector).map中的Key存在排序数据中,通过二分查找判断某个Key是否在map中,时间复杂度为O(logN).在用一个CVector存Key和Value,为了方便拿到Key和Value,这里有点冗余,Key被存了两次.现

STL系列之三 queue 单向队列

queue单向队列与栈有点类似,一个是在同一端存取数据,另一个是在一端存入数据,另一端取出数据.单向队列中的数据是先进先出(First In First Out,FIFO).在STL中,单向队列也是以别的容器作为底部结构,再将接口改变,使之符合单向队列的特性就可以了.因此实现也是非常方便的.下面就给出单向队列的函数列表和VS2008中单向队列的源代码.单向队列一共6个常用函数(front().back().push().pop().empty().size()),与栈的常用函数较为相似. VS2

STL系列之六 set与hash set

STL系列之六 set与hash_set set和hash_set是STL中比较重要的容器,有必要对其进行深入了解.在STL中,set是以红黑树(RB-tree)作为底层数据结构的,hash_set是以Hash table(哈希表)作为底层数据结构的.set可以在时间复杂度为O(logN)情况下插入.删除和查找数据.hash_set操作的时间复杂度则比较复杂,这取决于哈希函数和哈希表的负载情况.下面列出set和hash_set的常用函数: set和hase_set的更多函数请查阅MSDN. se

STL系列十一 随机三趣题——随机重排,文件中随机取一行,生成N个随机数

本文将介绍三个有趣的随机问题,分别是随机重新排列.从文件中随机取一行数据.生成N个随机数. 一.随机重新排列 将一个序列打乱并对其进行随机的重新排列,关键在于每种序列的被选择概率要一样,不然有失"公平".现在让我们来寻找如何保证每种序列被选择的概率一样大的算法. 首先假设这个数组只有二个元素,设数组a为{1, 2},显然这个数组只有二种可能的排列,要么是{1,2}要么是{2,1}.很容易想到一种方法--只要第二个元素有50%的概率与第一个元素交换即可.用代码表现下: if (rand(

[STL系列]开篇简单介绍

开篇: 为了应付上机考,现在需要总结下关于STL的基础知识.由于以前各种代码都喜欢从头搭起,像这种现成的牛逼的STL就没怎么看,真是作死.现在来突击啦. 开始之前,简单看一段代码,功能很简单,就是要实现对一组数字的排序,以窥STL的一斑. 1 #include "iostream" 2 #include <algorithm> 3 #include <vector> 4 using namespace std; 5 6 int main() 7 { 8 vect

Gengxin讲STL系列——Queue和Stack

第三篇. 感觉队列和栈是必须的……所以决定加上这两个…… 我发现我已经买域名买上隐了……今天又买了个.top……真是智障…… Queue(队列FIFO)和Statk(栈FILO). 那么为什么要这两个一块讲呢?理由很简单,数据结构小班同志们都学了,基础原理都会了,这两个东西很像,无论是在操作上还是其他别的方面…… 而这篇博客主要是详解STL中queue和statk的用法. 首先,回顾一下队列和栈: (1)     非STL的队列实现方法: 用数组模拟一个队列,两个指针,分别指向队列的头和尾,入队

STL系列之二 stack栈

栈(statck)这种数据结构在计算机中是相当出名的.栈中的数据是先进后出的(First In Last Out, FILO).栈只有一个出口,允许新增元素(只能在栈顶上增加).移出元素(只能移出栈顶元素).取得栈顶元素等操作.在STL中,栈是以别的容器作为底部结构,再将接口改变,使之符合栈的特性就可以了.因此实现非常的方便.下面就给出栈的函数列表和VS2008中栈的源代码,在STL中栈一共就5个常用操作函数(top().push().pop(). size().empty() ),很好记的.

STL系列之一 deque双向队列(转载)

deque双向队列是一种双向开口的连续线性空间,可以高效的在头尾两端插入和删除元素,deque在接口上和vector非常相似,下面列出deque的常用成员函数: deque的实现比较复杂,内部会维护一个map(注意!不是STL中的map容器)即一小块连续的空间,该空间中每个元素都是指针,指向另一段(较大的)区域,这个区域称为缓冲区,缓冲区用来保存deque中的数据.因此deque在随机访问和遍历数据会比vector慢.具体的deque实现可以参考<STL源码剖析>,当然此书中使用的SGI ST

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; } 这种计算的效率显然不高,我们可以用二分法来加速计算x^n=x^(n/2)* x^(n/2)即x^10=x^5*x^5,这