STL源码剖析(一)STL简介

文章目录

  • STL源码剖析(一)STL简介
    • 一、STL概述
    • 二、STL六大组件
      • 2.1 容器(containers)
      • 2.2 算法(algorithms)
      • 2.3 迭代器(iterators)
      • 2.4 仿函数(functors)
      • 2.5 适配器(adapter)
      • 2.6 配置器(allocators)
    • 三、源码下载

一、STL概述

STL是Standard Template Library的简称,它是一套C++标准模板库,它借助模板实现了一些常用的数据结构与算法,给开发带来了极大的便利

二、STL六大组件

STL有六大组件,分别为容器(containers)算法(algorithms)迭代器(iterators)仿函数(functors)适配器(adapter)配置器(allocators)

2.1 容器(containers)

容器是各种数据结构的实现(vector、list、dequeue、queue、stack、set、map),从实现上,它是一种类模板。在使用STL方面,我们接触最多的就是容器

2.2 算法(algorithms)

常见的算法有sort(排序)、search(搜索)、copy(拷贝)等等,从实现上,它是一种函数模板

2.3 迭代器(iterators)

迭代器是容器和算法之间的桥梁,算法通过容器的迭代器来进行操作。迭代器可以看作是一种智能指针,它支持原生支持的一般操作,如*,->,++,–等。从实现上,它是一种类模板,通过重载operator*、operator->、operator++等运算符来实现和原生指针类似的功能

2.4 仿函数(functors)

仿函数是一种行为类似函数,可作为算法的策略。从实现上,它是一种类模板,通过重载operator()符号,来达到类似函数一样可以被调用的效果

2.5 适配器(adapter)

适配器是一种可以用来装饰容器、仿函数、迭代器的东西,它可以包含旧的对象,重新修改调用接口,底层实现依旧是通过旧的对象,从而来达到特定的功能

2.6 配置器(allocators)

配置器负责空间的配置和管理,从实现上,它是一种用于分配内存、释放内存的类模板。在使用方面,配置器并不会暴露给使用者,但它作为一个幕后工作者,发挥着巨大作用

各个组件的关系如下

三、源码下载

STL有众多的版本,本系列文章基于SGI版本的STL讲解 ,可以从SGI STL源码获取到源码

STL源码剖析(一)STL简介相关推荐

  1. 《STL源码剖析》相关面试题总结

    一.STL简介 STL提供六大组件,彼此可以组合套用: 容器 容器就是各种数据结构,我就不多说,看看下面这张图回忆一下就好了,从实现角度看,STL容器是一种class template. 算法 各种常 ...

  2. 【有点狂的手撕STL】STL源码剖析精读 000

    STL源码剖析精读 前言 通过刷题感受到了C++中STL的妙用,十分的想要提高自己对于STL的理解以及运用能力,因此开设此专栏,并希望能够带领大家一起感受C++中STL的魅力. 一.STL简介 STL ...

  3. STL源码剖析学习七:stack和queue

    STL源码剖析学习七:stack和queue stack是一种先进后出的数据结构,只有一个出口. 允许新增.删除.获取最顶端的元素,没有任何办法可以存取其他元素,不允许有遍历行为. 缺省情况下用deq ...

  4. 《STL源码剖析》学习-- 1.9-- 可能令你困惑的C++语法1

    最近在看侯捷的<STL源码剖析>,虽然感觉自己c++看得比较深一点,还是感觉还多东西不是那么明白,这里将一些细小的东西或者概念记录一下. 有些东西是根据<C++编程思想>理解的 ...

  5. 《STL源码剖析》学习--6章--_rotate算法分析

     最近在看侯捷的<STL源码剖析>,其中有许多不太明白之处,后经分析或查找资料有了些理解,现记录一下. <STL源码剖析>学习--6章--random access ite ...

  6. 《STL源码剖析》学习--6章--power算法分析

    最近在看侯捷的<STL源码剖析>,其中有许多不太明白之处,后经分析或查找资料有了些理解,现记录一下. 6章--power算法分析 书本中的算法如下所示: template <clas ...

  7. STL源码剖析——P142关于list::sort函数

    在list容器中,由于容器自身组织数据的特殊性,所以list提供了自己的排序函数list::sort, 并且实现得相当巧妙,不过<STL源码剖析>的原文中,我有些许疑问,对于该排序算法,侯 ...

  8. STL源码剖析---红黑树原理详解下

    转载请标明出处,原文地址:http://blog.csdn.net/hackbuteer1/article/details/7760584       算法导论书上给出的红黑树的性质如下,跟STL源码 ...

  9. STL源码剖析面试问题

    当vector的内存用完了,它是如何动态扩展内存的?它是怎么释放内存的?用clear可以释放掉内存吗?是不是线程安全的? vector内存用完了,会以当前size大小重新申请2* size的内存,然后 ...

最新文章

  1. python写web自动化_使用Python+selenium实现第一个自动化测试脚本
  2. SAP-采购订单交货成本抓取方法
  3. 干货:从0到1搭建「推荐策略产品」的深度思考
  4. elemntui icon 大小_自定义elementui中的图标
  5. 软件测试人员应具备的素质
  6. python3.7 倒计时
  7. Es6语法实现的转盘抽奖效果——可配置转盘的抽奖概率
  8. JS清除字符串中重复的值
  9. 如何突破织梦后台发布文章的250字符的内容摘要字数限制
  10. 每日一题/004/矩阵/矩阵问题转化为线性方程组问题
  11. php文件格式,php是什么文件格式
  12. 前端:让我们做一个快乐的切图仔!
  13. GGT: Graph-Guided Testing for Adversarial Sample Detection of Deep Neural Network 论文笔记
  14. 家用千兆路由器排行榜前十名_求家用路由器排名前十名,有哪些比较推荐?
  15. Java初级试题(编程、简答、选择)
  16. 抓取某一个网站整站的记录
  17. 专访|单月 GMV 破千万,5800 万用户,樊登读书视频生态解读
  18. 做业务员有什么好处?
  19. 医疗图像分割(二)snake模型综述
  20. 有个人发现了一个在网吧忘了关掉的QQ后……

热门文章

  1. 《阿里巴巴java规范》 Result 方式杂谈
  2. Fortran库函数atan与atan2
  3. 这款开源的STM32外设驱动库,可以直接拿来用!
  4. 基于matlab的步进电机仿真(一)
  5. 基于51单片机的鸡舍智能环境控制有害气体检测无线WiFi通信proteus仿真原理图PCB
  6. 发布订阅模式vs观察者模式
  7. 牛客练习赛52 B.Galahad (树状数组)
  8. 《人月神话》浅读一下吧(上)
  9. VueJs中的reactive函数
  10. 大厂经典高频面试题体系化集合,最强技术实现