lxidea的 Boolan STL与泛型编程 学习笔记(一)

本周开始,我们进入到了第三个课程内容的学习中——《STL与泛型编程》。

STL全名是标准模板库(Standard Template Library)。它与C++标准库(C++ Standard Library)的不同在于,模版库里面主要用到的是泛型编程(Generic Programming)的方式,主要都是用模板来实现的一些功能。而标准库都给定了需要的数据类型。

本周内容就是着重探索模版库中的那些细节来的。模版库对于C++来说是非常有用的一个仓库。里面包含了六大部件,分别是 容器,分配器,算法,迭代器,适配器,和仿函数。经典的面向对象编程会设计成为是 数据和算法 打包在一起。但是泛型编程不然,将数据和算法分开设计。需要使用的时候再由使用者根据需要自己选取。

对模版库开始接触是从容器开始,在这之前,了解一下,C++的模版库的容器都是采用的是前闭后开的区间形式。在C++ 11中加入了auto关键字以及新式的for loop语法,可以方便的合用来减小代码输入量。

容器

从类型分,容器可分为2种

  • 顺序容器
  • 关联性容器
    这是侯爷的划分。
    但讲义上给定的划分方式,将关联性容器又分了2种。
  1. 关联性容器
  2. 无序容器(具体表现形式,就是哈希表中采用的独立链)

接着,从STL中的几个典型的容器,我们分别看到了若干个测试代码,每个测试代码对应一个容器类型
于是我们一共看到了

  • array
  • vector
  • deque
  • list
  • forward-list
  • slist
  • stack
  • queue
  • multiset
  • multimap
  • unordered_multiset
  • unordered_multimap
  • set
  • map
  • unordered_set
  • unordered_map

这里有如此多的示例代码和容器的测试,在此不宜一一冗述。

他们的主要区别和关联在于array是固定大小的,分配内存之后,array就不能再变化内存空间了。

vector、deque、stack、queue都是一维顺序的可变大小的容器。不同在于他们的元素插入位置以及内存增加方向是不同的。

list和forward-list分别是双向链表和单向链表,都是C++ 11标准库里带有的容器。这里面,单向链表实际上是GNU C++ Compiler在之前非标准库中实现的一种单向链表的slist的标准化。他们在内存中是通过指针来串联起来的,内存空间是不连续的。

接下来set和map是两种基于红黑树内存结构的容器,一个直译“集合”,一个是“映射”。他们有python字典的意味,他们都有自己的key跟value。对于set容器,key就是value;而对于映射,可以从任意类型的key映射到任意类型的value。set和map中单个key对应的元素只能够存放一个的。如果要放置key相同的多个元素怎么办,那就可以采用multiset和multimap了。

对于无序的容器,简单的从外部函数输出结果中查看了一下它的内存结构。测试的容器是unordered_set。对于无序容器,大多采用独立链形式来存储,容器是由一串篮子(bucket)组成的,每个篮子后面跟着一个链表,链表上存储的是他的元素。为了保障容器搜索元素和排序的效率,篮子的个数一定比容器所存储的元素个数要多。这也可以从测试代码的输出结果中看到。因此,必然的,很多篮子上的元素个数实际上是为零的。

分配器

最后,简单介绍了一下,六大部件中的分配器。

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

推荐阅读更多精彩内容