STL容器 算法 迭代器 适配器

STL包括容器,算法和迭代器

STL的模板类为c++提供了完善的数据结构,它的模板类的样式就好象数据结构中用类c或者类c++或者类

容器算法就是数据结构的数据组织和操作,而迭代器则是为了容器和算法分离而专门设计的,它就像是循环里用的指针,但是在任何情况下,STL算法都是用迭代器来处理容器的

以vector 为例,vector s;它们的迭代器是这样:vector::iterator it;它们的插入是insert()或者put()或者add()等函数。s.begin()和s.end()都是返回的迭代器类型,s.end()不是指向最后一个元素,而是再后面一个。对应的find()函数返回的通常都是迭代器。而set()函数是修改特定位置的值。


容器的种类

第一种分类方法:

1. 序列式容器:包括vector ,deque,list,所谓序列式就是容器中的值都是有相对位置的,也就是可以随机存取,vector ,deque直接提供了[ ]下标的操作符,而list没有,但是它就是一个双向链表,在随机插入删除方面很有效。

vector就是数据结构中的堆,由一个起始地址elemtype *start ,和int length组成,所以可以随机存取,而且动态分配大小,但是头插入和尾插入的效率是不同的。而deque就像循环队列,随机存取,头插入和尾插入都一样。

它们的迭代器都是随机存取的迭代器,所以对于sort()等函数都是可以用的。

2. 关联式容器

标准关联式容器:包括set,map ,以及对应的容许有重复值的multiset和multimap。它们是通过键值得到结果的,而不是通过序列。

还有非标准的关联式容器:hash_set、hash_multiset、hash_map和hash_multimap。

关联式容器是基于数据结构的树形结构建立的,平衡树或者排序树。

第二种分类方法

1. 连续内存存放

vector ,edque,String都是典型的连续内存存放,所以它们的随机存取很方便,效率也很高,但是插入删除就差一些了。

2. 链表式的节点存放。

基于节点的容器的优缺点正好相反,典型的是list,树形的set和map当然也是,但是它们不是一般的链表。至于stack,queue,它们的实现可以是链式的也可以是顺序的。


容器适配器

stack,queue,priority_queue(优先队列),这三种被称作容器适配器,它们是利用基本容器衍生出来的。stack衍生自deque,queue衍生自deque,priority_queue衍生自vector.

栈和队列是我们很熟悉的,它们没有随机存取,只有push,pop,front,top等用法,如果想遍历的话,就需要把前一个先pop出来,于是也就有了queue和priority_queue的区别。queue输出的时候就是按照你push的顺序,但是priority_queue却是默认按照降序输出,即使还没有pop调用front,输出的也是最大的那一个。也就是它在你push时已经进行了排序。这就是“优先级”的意义。


STL算法

STL算法也就是在数据结构里经常遇到的算法操作:查找,排序,复制

算法的参数都是基于迭代器,而不是具体的容器

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

推荐阅读更多精彩内容

  • STL(标准模板库),是目前C++内置支持的library。它的底层利用了C++类模板和函数模板的机制,由三大部分...
    岁与禾阅读 38,304评论 3 133
  • 容器的概念所谓STL容器,即是将最常运用的一些数据结构(data structures)实现出来。容器是指容纳特定...
    饭饭H阅读 358评论 0 0
  • 标签(空格分隔): STL 运用STL,可以充分利用该库的设计,让我为简单而直接的问题设计出简单而直接的解决方案,...
    认真学计算机阅读 1,453评论 0 10
  • C++ 标准模板库(STL) 作者:AceTan,转载请标明出处! 0x00 何为STL## STL(Standa...
    AceTan阅读 4,824评论 3 44
  • 前言: 详细介绍: List:元素有放入顺序,元素可重复Map:元素按键值对存储,无放入顺序Set:元素无放入顺序...
    YBshone阅读 8,530评论 0 17