【STL】概述

STL: (Standard Template Library) 标准模板库

STL广义上讲分为三类,algorithm算法container容器iterator迭代器,容器和算法通过迭代器可以进行无缝地连接,容器里面存数据,算法进行排序或查找,迭代器是用来访问容器里的数据的。

STL的一个重要特点就是数据结构和算法的分离,即数据的存储和数据的访问进行了分离,如栈的栈顶指针为栈数据的常用访问,而栈的数据存储是通过栈的数据结构。

STL发展

长久以来,软件界一直希望建立一种可重复利用的东西,以及一种得以制造出”可重复运用的东西”的方法,从函数(functions),类别(classes),函数库(function libraries),类别库(class libraries)、各种组件,从模块化设计,到面向对象(object oriented ),为的就是复用性的提升。

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

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

STL(Standard Template Library,标准模板库),是惠普实验室开发的一系列软件的统称。现在主要出现在 c++中,但是在引入 c++之前该技术已经存在很长时间了。

容器和算法之间通过迭代器进行无缝连接。STL 几乎所有的代码都采用了模板类或者模板函数,这相比传统的由函数和类组成的库来说提供了更好的代码重用机会。

它的发展历程可以从以下几个方面来讨论:

  • 早期版本:STL最初由Alexander Stepanov和Meng Lee于1994年开发,最初被称为SGI STL(Silicon Graphics Inc. STL)。它的目的是为了在C++中提供高效的数据结构和算法的实现,大大简化了C++程序的开发。早期版本的STL包含容器、迭代器、算法、函数对象等组件。
  • 标准化:由于STL在C++社区中的广泛应用,它于1998年正式被纳入C++标准库中。这一标准化使得STL更加稳定和可靠,成为C++程序员必备的工具之一。
  • 扩展和优化:随着C++标准的不断更新,STL也不断得到扩展和优化。例如,C++11标准中新增了多线程支持,同时STL也在容器、迭代器、算法等方面得到了进一步扩展和优化。此外,一些开源社区也提供了STL的优化版本,如boost库、Eastl等。
  • 应用领域:STL在软件开发中有广泛的应用,包括游戏开发、图形处理、科学计算、数据挖掘等领域。尤其在高性能和高并发的系统开发中,STL的应用更加广泛。

总的来说,STL的发展历程是一个不断完善和拓展的过程,它为C++程序员提供了强大的工具,极大地提高了程序开发效率和性能。

STL的特点

  • 可重用性(stl中几乎所有代码都是通过模板类,模板函数的方式实现)
  • 高性能(map的键值,map采用红黑树的变体来实现,查找某个元素只需log2^n的时间复杂度,即十万条数据差不多只用比较十四次)
  • 高移植性(项目A用STL写的模块可以直接移植到项目B)
  • 跨平台(VS可以在XCode上直接编译)

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

参考博文:

https://blog.csdn.net/soinlove36/article/details/119796794

https://blog.csdn.net/ltzoro/article/details/132102671

https://blog.csdn.net/hoppingg/article/details/130143286

相关推荐

  1. STL概述

    2024-04-07 20:26:03       38 阅读
  2. SQL概述

    2024-04-07 20:26:03       30 阅读
  3. C++ STL 概述

    2024-04-07 20:26:03       22 阅读
  4. C++高级-STL概述

    2024-04-07 20:26:03       48 阅读
  5. SQL概述SQL分类

    2024-04-07 20:26:03       60 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-07 20:26:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-07 20:26:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-07 20:26:03       82 阅读
  4. Python语言-面向对象

    2024-04-07 20:26:03       91 阅读

热门阅读

  1. 系统规划与管理师今年改版?你关心的都在这里

    2024-04-07 20:26:03       40 阅读
  2. 如何利用OceanBase v4.2的 Runtime Filter提升查询效率

    2024-04-07 20:26:03       29 阅读
  3. MySQL 慢查询优化案例

    2024-04-07 20:26:03       38 阅读
  4. RESTful API如何使用及构建 web 应用程序(附代码)

    2024-04-07 20:26:03       42 阅读
  5. Docker是一个开源的应用容器引擎

    2024-04-07 20:26:03       40 阅读
  6. HTML:浏览器的默认行为--阻止浏览器的默认行为

    2024-04-07 20:26:03       30 阅读
  7. 嵌入式技术主要包括什么?

    2024-04-07 20:26:03       41 阅读
  8. mysql存储引擎

    2024-04-07 20:26:03       40 阅读
  9. 鸿蒙组件学习_Image组件

    2024-04-07 20:26:03       39 阅读
  10. 如何找出公司间存在关联关系?

    2024-04-07 20:26:03       40 阅读