C++ STL(2)

C++ STL(2)

from my csdn blog

顺序性容器

  • 向量 vector

    • 动态数组,创建后会在内存中分配一段连续的内存空间。
    • 初始空间大小可以预先指定,当数据超过空间时会重新分配一块内存,将原数据拷贝到新的内存块中,然后销毁原内存块中的对象(调用析构函数),最后释放原内存。
    • 所以尽量不要导致重复申请内存,只有预先知道大小的情况下vector性能最优,大多数情况下vector不是满存的。
    • 注意:内部插入删除效率非常低,头部也不能插入删除,最好创建时指定空间大小,只能在末尾进行push,pop。
  • 双向链表 list

    • 线性链表,若干节点构成(信息块+前驱后继指针),无需分配内存大小且可任意伸缩,存储在非连续的内存空间中。
    • 随即检索性能差,目标元素越靠后,时间越长。 < vector
    • 可迅速在任何节点进行插入删除,也可以在两端进行push,pop。 >vector
    • 相对vector,内存占用更多。
  • 双端队列 deque

    • 优化的,对序列两端元素进行添加删除的序列容器,采用多个连续的存储块,并且在一个映射结构中保存对这些块和顺序的跟踪。
    • 较为快速的随机访问 < vector > list
    • 两端添加元素开销小,无需重新分配内存 > vector
    • 可以在内部进行插入和删除,性能不如 list
    • 感觉这玩意挺不错的,在需求多情况下,如果不追求效率可以用

关联容器

  • set, multiset, map, multimap

    • 非线性结构,使用一种高效特殊的平衡检索二叉树——红黑树(我学过AVL和splay)
  • 集合 set

    • 一组元素的组合,包含的元素值唯一,按一定顺序排列
    • 内部通过链表的方式组织,插入时比vector块,查找和末尾添加比vector慢
  • 多重集合 multiset

    • 与set不同是元素可以不唯一
  • 字典 map

    • 提供 键-值 关系一对一的数据存储,键不可重复,且按照一定顺序排列,默认升序排列
    • multimap允许键不唯一

区别

  • 关联容器链式存储,vector顺序存储,插入删除操作更快。但是比list要慢,list为线性结构,而关联容器每次插入删选需要重新排序。

  • 关联容器元素检索比vector慢,比list快很多,当容器越大时,相对于list的优越性更加明显。

  • 在使用上set 区别于vector,deque,list 的最大特点就是set 是内部排序的,这在查询上虽然逊色于vector ,但是却大大的强于list 。(有点不大懂)

  • map的功能不可取代,其他容器无法做到。

容器适配器

  • 容器适配器

    • 栈stack
    • 队列queue
    • 优先队列priority_queue
  • 不懂的地方,粘过来的

    • 适配器是容器的接口,它本身不能直接保存元素,它保存元素的机制是调用另一种顺序容器去实现,即可以把适配器看作“它保存一个容器,这个容器再保存所有元素”。
    • STL 中提供的三种适配器可以由某一种顺序容器去实现。默认下stack 和queue 基于deque 容器实现,priority_queue 则基于vector 容器实现。
    • 当然在创建一个适配器时也可以指定具体的实现容器,创建适配器时在第二个参数上指定具体的顺序容器可以覆盖适配器的默认实现。
    • 由于适配器的特点,一个适配器不是可以由任一个顺序容器都可以实现的。
  • 注意事项

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

推荐阅读更多精彩内容