在所有程序开发中,可重复利用是非常重要的感念之一,我们常见的函数、类别、组件等等都是基于这个理念诞生的,今天我们介绍的STL也是一样。下面我们就从STL产生原因、STL基本概念、STL六大组件简介、STL优点这几个方向给大家介绍。

一、STL产生原因

长久以来,软件界一直希望建立一种可重复利用的东西,以及一种得以制造出”可重复运用东西”的方法,让程序员的心血不止于随时间的迁移,人事异动而烟消云散,从函数(functions),类别(classes),函数库(function libraries),类别库(class libraries)、各种组件,从模块化设计,到面向对象(object oriented),为的就是复用性的提升。

复用性必须建立在某种标准之上。但是在许多环境下,就连软件开发最基本的数据结构(data structures) 和算法(algorithm)都未能有一套标准。大量程序员被迫从事大量重复的工作,竟然是为了完成前人已经完成而自己手上并未拥有的程序代码,这不仅是人力资源的浪费,也是挫折与痛苦的来源。

为了建立数据结构和算法的一套标准,并且降低他们之间的耦合关系,以提升各自的独立性、弹性、交互操作性(相互合作性,interoperability),诞生了STL。

二、STL基本概念

STL(Standard Template Library,标准模板库),是惠普实验室开发的一系列软件的统 称。现在主要出现在 c++中,但是在引入 c++之前该技术已经存在很长时间了。 STL 从广义上分为: 容器(container) 算法(algorithm) 迭代器(iterator),容器和算法之间通过迭代器进行无缝连接。STL 几乎所有的代码都采用了模板类或者模板函数,这相比传统的由函数和类组成的库来说提供了更好的代码重用机会。

STL(Standard Template Library)标准模板库,在我们 c++标准程序库中隶属于 STL 的占到了 80%以上。

三、STL六大组件简介

STL提供了六大组件,彼此之间可以组合套用,这六大组件分别是:容器、算法、迭代器、仿函数、适配器(配接器)、空间配置器。 容器:各种数据结构,如vector、list、deque、set、map等,用来存放数据,从实现角度来看,STL容器是一种class template。 算法:各种常用的算法,如sort、find、copy、for_each。从实现的角度来看,STL算法是一种function tempalte. 迭代器:扮演了容器与算法之间的胶合剂,共有五种类型,从实现角度来看,迭代器是一种将operator* , operator-> , operator++,operator–等指针相关操作予以重载的class template. 所有STL容器都附带有自己专属的迭代器,只有容器的设计者才知道如何遍历自己的元素。原生指针(native pointer)也是一种迭代器。 仿函数:行为类似函数,可作为算法的某种策略。从实现角度来看,仿函数是一种重载了operator()的class 或者class template 适配器:一种用来修饰容器或者仿函数或迭代器接口的东西。 空间配置器:负责空间的配置与管理。从实现角度看,配置器是一个实现了动态空间配置、空间管理、空间释放的class tempalte.

STL六大组件的交互关系,容器通过空间配置器取得数据存储空间,算法通过迭代器存储容器中的内容,仿函数可以协助算法完成不同的策略的变化,适配器可以修饰仿函数。

四、STL优点

STL 是 C++的一部分,因此不用额外安装什么,它被内建在你的编译器之内。 STL 的一个重要特性是将数据和操作分离。数据由容器类别加以管理,操作则由可定制的算法定义。迭代器在两者之间充当“粘合剂”,以使算法可以和容器交互运作 程序员可以不用思考 STL 具体的实现过程,只要能够熟练使用 STL就 OK 了。这样他们就可以把精力放在程序开发的别的方面。 STL 具有高可重用性,高性能,高移植性,跨平台的优点。 高可重用性:STL 中几乎所有的代码都采用了模板类和模版函数的方式实现,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。关于模板的知 识,已经给大家介绍了。 高性能:如 map 可以高效地从十万条记录里面查找出指定的记录,因为 map 是采用红黑树的变体实现的。 高移植性:如在项目 A 上用 STL 编写的模块,可以直接移植到项目 B 上。

本文来自千锋教育,转载请注明出处

STL系列使用教程(一)基础概念相关推荐

  1. NumPy 快速入门系列:应用统计学基础概念、相关统计指标与NumPy的实现

    NumPy 快速入门系列:应用统计学基础概念.相关统计指标与NumPy的实现 前言: 统计学导论: 统计学定义: 统计学分类: 统计学基本概念: 统计过程: 统计指标与NumPy: 用 Python ...

  2. QCC304x系列开发教程(基础篇)之2.4-QCC3040之如何修改MDE的主题

    查看全部教程开发请点击:高通蓝牙耳机QCC304x开发详解汇总(持续更新中) 查看本文全部文章请点击:QCC304x系列开发教程(基础篇)之2.3-QCC3040之如何修改MDE的主题 ======= ...

  3. 机器学习里面的基函数_机器学习系列(一)——基础概念及分类

    机器学习基础(一) emm... 那个第一篇文章,简单的自我介绍一下,机器学习小白,希望和大家一起进步,有什么问题可以留言一起探讨. 本文撰写于2020/1/1 是本人学习机器学习时,做的笔记摘要,为 ...

  4. FDM3D打印系列——2、一些基础概念

    大家好,我是阿赵. 在买3D打印机之前,一般都会很迷茫,不知道3D打印机是怎样工作的,也不知道有哪些地方需要注意.上一篇文章通过打印一个模型,完整的体验了一次FDM打印3D模型的过程.这里解释一些在3 ...

  5. es存在某个字段的查阅_ElasticSearch系列02:ES基础概念详解

    1.ES 简介 1)定义 ES是elaticsearch简写, Elasticsearch是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储.检索数据:本身扩展性很好,可以扩展到上百台服务器 ...

  6. es 映射 mysql_ElasticSearch系列02:ES基础概念详解

    1.ES 简介 1)定义ES是elaticsearch简写, Elasticsearch是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储.检索数据:本身扩展性很好,可以扩展到上百台服务器, ...

  7. 嘴对嘴系列之es核心基础概念之文档和索引

    写在前面 通过之前的几篇安装指南,我们已经把Elasticsearch的集群搭建起来了,并且也使用了Kibana进行交互式的操作.在操作中,我们发现Elasticsearch提供了基于RESTFUL风 ...

  8. QCC304x系列开发教程(基础篇)之2.1-QCC3040之开发环境搭建

    目录 一.安装MDE 二.安装ADK_Toolkit 三.安装qact_base.win.7.2_installer_00025.2压缩包 四.下载SDK 五,打开QCC3040工程

  9. 区块链教程(二):基础概念介绍

    注:本教程为技术教程,不谈论且不涉及炒作任何数字货币 本系列重点在于以太坊基础知识.以太坊客户端以及以太坊solidity编程,因此博客重点在于以太坊核心知识点的掌握,区块链部分的基础知识可以作为补充 ...

最新文章

  1. WKWebView Safari调试、JS互调、加载进度条、JS中alert、confirm、prompt
  2. RemoteFX原理简介
  3. [导入]利用PIL生成水印图片或文字
  4. chrome jssip
  5. 1046:判断一个数能否同时被3和5整除
  6. signalr网上学习资料
  7. C#垃圾回收机制(GC)
  8. java实现打印菱形
  9. leetcode 1370. 上升下降字符串
  10. 上拉电阻下拉电阻的总结
  11. 我敢说,这个版本的斗地主你肯定没玩过?
  12. 利用VB.NET绘制简易表白小程序
  13. 命令窗 创建vue 项目过程
  14. 使用.net开发手机管理软件 (九) 短信部分——PDU简介及其格式
  15. SecureCRT安装与使用
  16. 电脑小技巧:怎么取消电脑开机密码
  17. 钉钉再放大招!打造公司文化也有智能工具,中国4300万中小企业有福了
  18. SecureCRT安装破解教程
  19. 4 Django 路由分发 名称空间 伪静态 虚拟环境 版本区别 视图层
  20. opencv,获取图片

热门文章

  1. 组装r730服务器,戴尔poweredge r730服务器配置及系统安装详解教程
  2. mysql函数 字符长度限制_MySQL中使用group_concat()函数数据字符过长报错的问题解决方法...
  3. 【Java】深入理解Java虚拟机的读书笔记
  4. 大话重构连载9:大布局你伤不起
  5. 俄罗斯方块---九宫格版
  6. Unity3d之求物体体积
  7. UNIX不带缓存的IO函数
  8. rename批量修改文件名
  9. MapReduce-从HBase读取数据处理后再写入HBase
  10. 更新字典 (Updating a Dictionary,UVa12504)