Boolan C++标准库 第三周

第三讲

十八&十九、deque&queue和stack深度探索

1.容器deque

    分段连续

vector里面的指针指向buffer

vector怎么双向增长呢?

所有的容器都维护了两个迭代器:start和finish。

一个deque的大小是40,start(16)+finish(16)+map(4)+map_size(4)=40

 

 

insert()可以往前或往后推,判断离头端近还是尾端近,选择近的往那一端推。

deque如何模拟连续空间:iterator操作符重载,提供[]操作符。

 

2.容器queue和stack

deque双向进出

stack先进后出

queue先进先出

queue和stack的底层容器是deque

stack和queue都不允许遍历,也不提供iterator。

stack和queue都可选择list或deque作为底层结构。

queue不可选择vector作为底层结构。stack可选择vector作为底层结构。

stack和queue都不可选择set或map作为底层结构。

二十、RB-tree深度探索

关联式容器底层用红黑树和哈希表作支持。

1.容器rb_tree

红黑树是平衡二元搜寻树。排列规则有利search和insert,并保持适度平衡,无任何解答过深。

rb_tree提供遍历操作及iterators。按正常规则(++ite)遍历,便能获得排序状态。

不应使用rb_tree的iterators改变元素值(因为元素有其严谨排列规则)。编程层面并未阻止此事。如此设计是正确的,因为rb_tree即将为set和map服务(作为其底部支持),而map允许元素的data被改变,只有元素的key才是不可改变的。

rb_tree提供两种insertion操作:insert_unique()和insert_equal()。前者表示节点key在整个tree中独一无二,否则安插失败;后者表示节点key可重复。

key+data=value

rb_tree大小:12(G2.9),24(G4.9)

2.容器_Rb_tree(G4.9)

使用handle-body。

二十一、set/multiset深度探索

关联式容器底层用红黑树和哈希表作支持。

1.容器set

set/multiset以rb_tree为底层结构,因此有元素自动排序特性。排序的依据是key,而set/multiset元素的value和key合一:value就是key。

set/multiset提供遍历操作及iterators。按正常规则(++ite)遍历,便能获得排序状态。

无法使用set/multiset的iterators改变元素值(因为元素有其严谨排列规则)。set/multiset的iterator是其底部的RB tree的const-iterator,就是为了禁止user对元素赋值。

set元素的key必须独一无二,因此其insert()用的rb_tree的insert_unique()。

multiset元素的key可以重复,因此其insert()用的rb_tree的insert_equal()。

set的所有操作,都呼叫底层t(红黑树)的操作。从这层意义看,set是个container adapter。

2.容器set,in VC6

VC6不提供identity(),_Kfn(内部class)相当于G2.9的identity()。

二十二、map/multimap深度探索

1.容器map

map/multimap以rb_tree为底层结构,因此有元素自动排序特性。排序的依据是key。和set的不同:key和data合成value。

map/multimap提供遍历操作及iterators。按正常规则(++ite)遍历,便能获得排序状态。

无法使用map/multimap的iterators改变元素的key(因为key有其严谨排列规则),但可以用它改变元素的data。因此map/multimap内部自动将user指定的key tyep设为const,禁止user对元素的key赋值。

map元素的key必须独一无二,因此其insert()用的rb_tree的insert_unique()。

multimap元素的key可以重复,因此其insert()用的rb_tree的insert_equal()。

容器map有四个模板参数,前两个Key和T(即data)没有默认值。map把Key和T包成pair<const Key,T>。

2.容器map,in VC6

VC6不提供select1st(),_Kfn(内部class)相当于G2.9的select1st()。

3.容器map,独特的operator[]

    传回和key相关的data。如果key不存在,会用key创建一个pair,使用默认的data值。

二十三&二十四、hashtable深度探索

1.容器hashtable

如果发生碰撞,把它们放在一个链表串起来。Sepatate Chaining。

hashtable一开始有一定量的buckets(vector)。如果元素的个数比buckets个数多,就要rehashing。因为链表过长,搜寻速度慢。GUN C中一开始buckets的个数是53,扩展时*2然后找附近的质数即97。数字不是运行时才计算的,而是一开始就编好的。

可以用hashtable iterators改变元素的data,但不能改变元素的key。因为hashtable根据key实现严谨的元素排列。

sizeof(hashtable)  = 1 + 1 +1 + sizeof(buckets)(12) + 4 = 19 ->20

GUN C用的单向链表,VC用的双向链表。

Hashtable需要指定6个模板参数。

2.hash-function,hash-code

hash function的目的,就是希望根据元素值算出一个hash code(一个可进行modulus运算的值),使得元素经hash code映射之后能够杂够乱够随机地被置于hashtable内。愈是杂乱,愈不容易发生碰撞。

3.modulus运算

二十五、hash_set/hash_multiset,hash_map/hash_multimap概念

 

二十六、unordered容器概念

    只是换了名字,和hash一样。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容