C++STL理论基础
C++STL理论基础
开发工具与关键技术:C++、VisualStudio
作者:何任贤
撰写时间:2019年08月16日
STL(StandardTemplateLibrary,标准模板库)是惠普实验室开发的一系列软件 的统称。
现然主要出现在 C++中,但在被引入 C++之前该技术就已经存在了很长 的一段时间。 STL
的从广义上讲分为三类:algorithm(算法)、container(容器)和 iterator (迭代器),
容器和算法通过迭代器可以进行无缝地连接。几乎所有的代码都采 用了模板类和模板函数
的方式,这相比于传统的由函数和类组成的库来说提供了 更好的代码重用机会。在 C++标
准中,STL 被组织为下面的 13 个头文 件: 、、、
、、、、、 、、、
和。
上图是指算法、迭代器和容器的关系
STL的六大组件:
- 容器(Container) //相当于链表
- 算法(Algorithm)
- 迭代器(Iterator) //相当于指针
- 仿函数(Functionobject)
- 适配器(Adaptor)
- 空间配制器(allocator)
那么使用STL有什么好处:
- STL是C++的一部分,因此不用额外安装什么,它被内建在你的编译器之内。
- STL的一个重要特点是数据结构和算法的分离。尽管这是个简单的概 念,但是这种分
离确实使得 STL 变得非常通用。 例如,在 STL的 vector 容器中,可以放入元素、基
础数据类型变量、元素 的地址; STL的sort()函数可以用来操作 vector,list 等容器。 - 我们可以不用思考 STL 具体的实现过程,只要能够熟练使用 STL 就 OK 了。这样我
们就可以把精力放在程序开发的别的方面。 - STL 具有高可重用性,高性能,高移植性,跨平台的优点。
5.高可重用性:STL 中大多数的代码都采用了模板类和模版函数的方式实现。
6.高性能:如 map 可以高效地从十万条记录里面查找出指定的记录,因为 map 是采用
红黑树的变体实现的。(红黑树是平横二叉树的一种)
7.跨平台:如用 windows的 Visual Studio编写的代码可以在Mac OS 的XCode 上直接
编译。
关于STL三类概述
- 容器的概念:用来管理一组元素,容器分为两类分别是序列式容器(Sequence containers)和关联式容器(Associated containers)
序列式容器的特点:
每个元素都有固定位置--取决于插入时机和地点,和元素值无关。
序列式容器有三种分别是vector 、 deque 、 list
实现头文件的头文件分别是、、
关联式容器的特点:
元素位置取决于特定的排序准则,和插入顺序无关
序列式容器有四种分别是set 、 multiset 、 map 、 multimap
实现头文件的头文件分别是 、、、
迭代器的概念:迭代器在STL中用来将算法和容器联系起来,起着一种黏和剂的作用,每一个容器都定义了其本身所专有的迭代器,用以存取容器中的元素。
迭代器部分主要由头文件, 和 组成。
是一个很小的头文件,它包括了贯穿使用在 STL 中的几个模板的声明。
主要提供了迭代器使用的许多方法。
主要部分是模板类 allocator,它负责产生所有容器中的默认分配器,并
且为容器中的元素分配存储空间,同时也为某些算法执行期间产生的临时对象提供
机制。算法:STL 提供了大约 100 个实现算法的模版函数,只要熟悉了 STL 之后,许多代
码可以被大大的化简,只需要通过调用一两个算法模板,就可以完成所需要的功能并
大大地提升效率。
算法部分主要由头文件,和组成,
是所有 STL 头文件中最大的一个,它是由一大堆模版函数组成的。
C++STL理论基础相关推荐
- C++之STL理论基础
1.基本概念 STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称.虽然主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间. ...
- c++STL(标准模板库)理论基础
标准模板库理论基础 基本概念 STL详细的说六大组件 使用STL的好处 容器 容器的概念 容器的分类 迭代器 算法 C++标准库 标准库中与语言支持功能相关的头文件 支持流输入/输出的头文件 与诊断功 ...
- STL(标准模板库)理论基础与容器
10.1 STL(标准模板库)理论基础 10.1.1基本概念 STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称.现然主要出现在C++中,但在被 ...
- STL学习系列一:STL(标准模板库)理论基础
STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称.现然主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间. STL的从广 ...
- 10、STL实用技术专题
10.STL实用技术专题 10.1STL(标准模板库)理论基础 10.1.1基本概念 #include <iostream> #include <vector> #includ ...
- STL库(C++11)提供的异步执行方法的方式
在进行并发编程的时候难免会遇到异步执行时候,现代C++标准库提供了几种异步执行的方式,本文收集整理了一下,以备将来翻阅. Thread方式 Thread 是STL提供的一种快捷创建线程的方式,极大方便 ...
- C++ 笔记(24)— STL map 类(map实例化、插入、查找、删除)
1. STL 映射类简介 map 和 multimap 是键-值对容器,支持根据键进行查找,区别在于,后者能够存储重复的键,而前者只能存储唯一的键. 为了实现快速查找, STL map 和 multi ...
- C++ 笔记(23)— STL vector 类(实例化 vector、末尾插入、指定位置插入、数组方式访问元素、指针方式访问元素、删除元素、大小与容量区别)
1. vector 特点 vector 是一个模板类,提供了动态数组的通用功能,具有如下特点: 在数组末尾添加元素所需的时间是固定的,即在末尾插入元素的所需时间不随数组大小而异,在末尾删除元素也如此: ...
- C++ 笔记(22)— STL string 类(字符串赋值、访问、拼接、查找、翻转、大小写转换)
1. 实例化和赋值 STL string #include <string> #include <iostream>int main () {using namespace s ...
最新文章
- 互联网10年,激战如梦
- 图解Windows下开发Objective-C程序之一 - 搭建Objective-C开发环境
- .NET开发的一些积累
- Charm Bracelet
- python自动化数据报告_如何:使用Python将实时数据自动化到您的网站
- 数据库信息 (表名 行数 堆 集群 非聚集)的查询
- c语言折半排序的程序,C语言实现九大排序算法的实例代码
- Django2 SQLite3迁移到MySQL数据库
- window-linux移植
- 数据结构 - 字符串的模式匹配
- Win7性能优化:解决多核处理器兼容问题
- 中国的码农们,沉睡了20年,该醒醒了
- 银行计算机储蓄系统程序流程图,银行储蓄系统流程图.doc
- VMware 设置虚拟机全屏
- 基于科大讯飞AIUI平台自定义语义库的开发
- 本世纪惊心动魄的粮食战争,中国反败为胜:陈思进--20190701
- 邹宇阳:仅成立8个月的个人网站如何月收入几十万美金
- 【批量行驶证识别】如何批量行驶证OCR识别行驶本行车本图片或复印件并导出至excel表格或文本格式,下面教你方法
- JAVA JComboBox的监听事件(ActionListener、ItemListener)
- android播放mp3方法,Android MediaPlayer 播放音频的方式
热门文章
- 机器学习sklearn19.0聚类算法——Kmeans算法
- centos 6 防火墙开启端口无效问题
- Sublime Text 3快捷键汇总
- 关于积累-accumulation
- 微软推出Windows XP SP3中文版
- Python:错误FileNotFoundError: [Errno 2] No such file or directory: 'objects/epsilon.pkl
- css hack方法,css hack怎么应用
- c语言和其他高级语言一样也要经过编译,C语言和其他高级语言的最大的区别是什么?...
- Python 脚本错误:IndentationError: unindent does not match any outer indentation level
- 【算法】一个简单的支持向量机(SVM)原理