C++STL理论基础

C++STL理论基础

开发工具与关键技术:C++、VisualStudio
作者:何任贤
撰写时间:2019年08月16日
STL(StandardTemplateLibrary,标准模板库)是惠普实验室开发的一系列软件 的统称。

现然主要出现在 C++中,但在被引入 C++之前该技术就已经存在了很长 的一段时间。 STL
的从广义上讲分为三类:algorithm(算法)、container(容器)和 iterator (迭代器),
容器和算法通过迭代器可以进行无缝地连接。几乎所有的代码都采 用了模板类和模板函数
的方式,这相比于传统的由函数和类组成的库来说提供了 更好的代码重用机会。在 C++标
准中,STL 被组织为下面的 13 个头文 件: 、、、
、、、、、 、、、
和。

在这里插入图片描述
上图是指算法、迭代器和容器的关系

STL的六大组件:

  1. 容器(Container) //相当于链表
  2. 算法(Algorithm)
    1. 迭代器(Iterator) //相当于指针
  3. 仿函数(Functionobject)
  4. 适配器(Adaptor)
  5. 空间配制器(allocator)

那么使用STL有什么好处:

  1. STL是C++的一部分,因此不用额外安装什么,它被内建在你的编译器之内。
  2. STL的一个重要特点是数据结构和算法的分离。尽管这是个简单的概 念,但是这种分
    离确实使得 STL 变得非常通用。 例如,在 STL的 vector 容器中,可以放入元素、基
    础数据类型变量、元素 的地址; STL的sort()函数可以用来操作 vector,list 等容器。
  3. 我们可以不用思考 STL 具体的实现过程,只要能够熟练使用 STL 就 OK 了。这样我
    们就可以把精力放在程序开发的别的方面。
  4. STL 具有高可重用性,高性能,高移植性,跨平台的优点。
    5.高可重用性:STL 中大多数的代码都采用了模板类和模版函数的方式实现。
    6.高性能:如 map 可以高效地从十万条记录里面查找出指定的记录,因为 map 是采用
    红黑树的变体实现的。(红黑树是平横二叉树的一种)
    7.跨平台:如用 windows的 Visual Studio编写的代码可以在Mac OS 的XCode 上直接
    编译。

关于STL三类概述

  1. 容器的概念:用来管理一组元素,容器分为两类分别是序列式容器(Sequence containers)和关联式容器(Associated containers)

序列式容器的特点:
每个元素都有固定位置--取决于插入时机和地点,和元素值无关。
序列式容器有三种分别是vector 、 deque 、 list
实现头文件的头文件分别是、、

关联式容器的特点:
元素位置取决于特定的排序准则,和插入顺序无关
序列式容器有四种分别是set 、 multiset 、 map 、 multimap
实现头文件的头文件分别是 、、

  1. 迭代器的概念:迭代器在STL中用来将算法和容器联系起来,起着一种黏和剂的作用,每一个容器都定义了其本身所专有的迭代器,用以存取容器中的元素。
    迭代器部分主要由头文件, 和 组成。
    是一个很小的头文件,它包括了贯穿使用在 STL 中的几个模板的声明。
    主要提供了迭代器使用的许多方法。
    主要部分是模板类 allocator,它负责产生所有容器中的默认分配器,并
    且为容器中的元素分配存储空间,同时也为某些算法执行期间产生的临时对象提供
    机制。

  2. 算法:STL 提供了大约 100 个实现算法的模版函数,只要熟悉了 STL 之后,许多代
    码可以被大大的化简,只需要通过调用一两个算法模板,就可以完成所需要的功能并
    大大地提升效率。
    算法部分主要由头文件,和组成,
    是所有 STL 头文件中最大的一个,它是由一大堆模版函数组成的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值