专栏首页Visual CodexSTL学习笔记(1)STL 概述

STL学习笔记(1)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 上。

参考《千峰教育》

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【C++100问】深度总结STL基本容器的使用

    文章首发于本人CSDN账号:https://blog.csdn.net/tefuirnever

    我是管小亮
  • C++STL入门汇总(OJ必备)

    做了没多少OJ题目,就发现了自己在STL使用的不足,明明可以更简单的完成一些工作,却总是因为不懂STL完全自己设计,导致对于一些简单问题仍然花费很多时间。因此,...

    种花家的奋斗兔
  • STL学习笔记(2)STL 三大组件

    容器,置物之所也。 研究数据的特定排列方式,以利于搜索或排序或其他特殊目的,这一门学科我们称为数据结构。大学信息类相关 专业里面,与编程最有直接关系的学科,首推...

    轻舞飞扬SR
  • STL简介

       STL是Standard Template Library的简称,C++ 之所以取得巨大成功,离不开它的标准库stl, 目前有好几个版本的标准库,但是因...

    ccf19881030
  • C++ STL编程轻松入门基础

    C++ STL编程轻松入门基础 1 初识STL:解答一些疑问 1.1 一个最关心的问题:什么是STL 1.2 追根溯源:STL的历史 1.3 千丝万缕的联系 ...

    猿人谷
  • 笔试面试的小结 反

    原文  http://blog.csdn.net/suky520/article/details/39641783

    bear_fish
  • C++ map 和 hashmap 区别

    1. stl map is an associative array where keys are stored in sorted order using b...

    用户7436765
  • 【书单】世界顶级程序员推荐,C/C++从入门到进阶

    编程是操作性很强的一门知识,看书少不了,但只有理论与实践相结合才能起到更好的效果。

    老九君
  • Spring Cloud 学习笔记(1) 概述

    zhangyunfeiVir

扫码关注云+社区

领取腾讯云代金券