关于C++STL简介

不会STL,就别说你学会了C++!
                                           ------沃布至 · 道誰硕德

STL

1什么是STL

STL全称(standard template libaray),:是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。

2. STL的主要组成部分(六大组件

在这里插入图片描述
①:容器

容器就是用来存放数据的类模板。(可变长数组、链表、平衡二叉树等数据结构在 STL 中都被实现为容器。
容器中可以存放基本类型的变量,也可以存放对象。对象或基本类型的变量被插入容器中时,实际插入的是对象或变量的一个复制品。

②:迭代器
迭代器是一个变量,相当于容器和操纵容器的算法之间的中介。迭代器可以指向容器中的某个元素,通过迭代器就可以读写它指向的元素。
简单来说,迭代器就是用来遍历容器的。

对于迭代器,我们还有一个在我们以后的学习中经常会遇得到的问题“ 迭代器失效”,这个问题我就不放在这篇博客中了,我会在后面关于vector的博客中详细谈谈这个问题。

③:算法
使用C++标准库的算法,需包含头文件< algorithm >。
STL算法用于处理一个或多个iterator区间,第一个区间通常以起点和终点表示,其他区间则多数情况下只需提供起点足矣,其终点可以根据第一区间的元素数量推导出来。调用者需保证区间的有效性。STL算法命名时,引入了两种特殊的后缀:
在这里插入图片描述
STL中的算法总共分为下列几大类:

  • 非更易型算法(nomodifying algorithm)

  • 更易型算法(modifying algorithm)

  • 移除型算法(removing algorithm)

  • 变序型算法(mutating algorithm)

  • 排序算法(sorting algorithm)

  • 已排序区间算法(sorted-range algorithm)

  • 数值算法(numeric algorithm)

④:适配器

配适器又叫容量配适器,容器适配器是一个封装了序列容器的类模板,它在一般序列容器的基础上提供了一些不同的功能。之所以称作适配器类,是因为它可以通过适配容器现有的接口来提供不同的功能。

⑤:仿函数

仿函数的主要功能是为了搭配STL算法使用,单独使用仿函数的情况比较少。
仿函数(functors)在C++标准中采用的名称是函数对象(function objects)。仿函数主要用于STL中的算法中,虽然函数指针虽然也可以作为算法的参数,但是函数指针不能满足STL对抽象性的要求,也不能满足软件积木的要求–函数指针无法和STL其他组件搭配,产生更灵活变化。仿函数本质就是类重载了一个operator(),创建一个行为类似函数的对象。

⑥:空间配置器:
空间配置器的存才就是为了提高内存的使用效和使用效率。
为了提高这两个效率,空间配置器分为了第一级配置器与第二级配置器。

  • 一级空间配置器

一级空间配置器只是简单的封装了一下malloc和free实现的。在allocate函数中如果通过malloc申请内存失败(失败返回0)就改用oom_malloc(size_t n)函数尝试分配内存,如果oom发现没有指定new-handler函数的话,那就直接调用__THROW_BAD_ALLOC,丢出bad_alloc或是直接通过exit(1)中止程序。

  • 二级空间配置器
    二级空间配置器为了避免小块内存带来的碎片化问题,使用内存池+free_list的形式管理内存。第二级空间配置器的代码如下所示。若申请的内存大于128个字节则直接调用一级空间配置器,如果不大于就将任何小额区块的内存__n上调至8的倍数(即使你请求1个字节,那也会申请8个字节)。这是因为在二级空间配置器中内存是通过free_list管理的。

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值