锐英源软件
第一信赖

精通

英语

开源

擅长

开发

培训

胸怀四海 

第一信赖

当前位置:锐英源 / 开源技术 / C++开源 / STL用法深度剖析
服务方向
人工智能数据处理
人工智能培训
kaldi数据准备
小语种语音识别
语音识别标注
语音识别系统
语音识别转文字
kaldi开发技术服务
软件开发
运动控制卡上位机
机械加工软件
软件开发培训
Java 安卓移动开发
VC++
C#软件
汇编和破解
驱动开发
联系方式
固话:0371-63888850
手机:138-0381-0136
Q Q:396806883
微信:ryysoft

锐英源精品原创,禁止转载和任何形式的非法内容使用,违者必究


STL用法深度剖析


STL很常用,但是按自己理解描述出来,也比较困难。比如我们在程序中需要实现一个对数组排序的功能,我们要专门写一个函数,而这类函数在开发中可以说是必不可少的,那么多搞开发的,都要为了这一功能,实现这样一个函数,不仅浪费了大量的人力物力,同时也不统一,尽管方法所做的事情一样,但方法名,参数等等没有事先的确定肯定各种各样,这样也会导致代码可读性降低,因此为了建立数据结构和算法的一套标准,诞生了STL,STL叫标准模板库,把可以用模板套用的功能标准化,使数据结构开发更容易。现代快速语言的成功都是以STL为基础上的扩展开发。

STL广义上可以分为容器、算法、迭代器,容器和算法通过迭代器进行无缝连接。

容器的作用就是将运用最广泛的一些数据结构实现出来,例如数组、链表、树、栈等,而算法就是用有限的步骤,解决逻辑或数学上的问题,迭代器是提供一种方法,能够依序寻访某个容器所含的各个元素,而又无需暴露容器内部的表现方法,每个容器都有自己专属的迭代器。
首先对我们的各个容器进行总结
string
string容器是一个存储我们字符的容器。分不同编码,string和wstring,这需要注意。
vector
vector是一个单端数组,我们都对数组比较了解,但我们也都知道,数组的大小是一但确定就不能够改变的,而我们的vector是动态数组,内存可以自动扩容。
Vector
deque
Deque是双端数组,如下所示
Deque

从这个结构图中不难发现,相对于vector这种单端数组来说,deque的头部插入删除速度会比vector快,但是vector的访问元素时的速度会比deque快,这就需要我们使用动态数组的时候根据自己的需求选择单端还是双端
stack
stack是一种先进后出的数据结构,如下
Stack

看图感觉这个容器跟我们的单端数组很像,但栈只有顶端的元素可以被外界使用,是不能够跨过顶部元素去操作其它元素,栈用来去模拟生活中的一些特定场景来说可以说是很合适的,比如弹夹,我们只能对最外的子弹进行操作,以及只能从最顶端装入子弹。
queue

跟我们的stack想反,我们的queue是一种先进先出的数据结构,它有两个出口
Queue

它允许从一端新增元素,从另一端移出元素,跟我们的stack相同,也是在一些特定场景下比较实用,比如模拟人排队的时候,它和stack同时还有一个特性就是不允许遍历
list
list集合使用了我们常说的链表,如下所示:
List

学习过链表的应该是知道链表相比与我们的数组插入删除元素要更高效,但是查询效率不如我们的数组,因此在集合选取中可以根据元素的操作频率来考虑使用list还是我们的动态数组
set/multiset

不同于之前的集合,我们这两个集合在元素插入的时候会对我们的元素进行排序,两者底层是用二叉树实现,两者的区别就是set不允许容器中有重复元素,而multiset中有重复元素。
map/multimap

这两个集合存储的数据跟我们之前介绍的集合都不太相同,它们里存储的是键值对,并且所有元素会根据键值自动排序,跟我们的Set/multiset相同,他俩也是属于关联式容器,底层结构是二叉树,同样的,map相比与multimap不允许集合中有重复key值元素。

 

STL类的使用,要包含对应的头文件,并使用using namespace std;其中map用法复杂,需要键值对类型pair的使用,其它的相对简单,只是vector的遍历机制和其它环境及普通数组差异比较大,需要耐心掌握。另外就是STL里还有互斥类,to_string()等用法,这些技巧也是常用的。

友情链接
版权所有 Copyright(c)2004-2015 锐英源软件

公司注册号:410105000449586 豫ICP备08007559号 最佳分辨率 1024*768

地址:A、郑州市芯互联大厦北楼1803A(文化路优胜北路西北角),B、郑州大学北校区院内