欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

STL--标准模板库--简要概述

程序员文章站 2022-06-22 10:57:09
STL--标准模板库 STL(Standared Template Library)即标准模板库,惠普实验室开发的一系列软件的统称。他是由Alexader Stepanov、Meng Leng Lee和David R Musser在惠普实验室工作时所开发出来的。 STL主要是一些”容器“ 的集合,这 ......

stl--标准模板库

#include <vector>     //头文件
  • stl(standared template library)即标准模板库,惠普实验室开发的一系列软件的统称。他是由alexader stepanov、meng leng lee和david r musser在惠普实验室工作时所开发出来的。

  • stl主要是一些”容器“ 的集合,这些”容器“ 有list、vector、set、map等等,stl也是算法和其他一些组件的集合,是世界上*c++程序员多年的杰作,是泛型编程的一个经典范例

  • stl的目的是标准化组件,这样就不用重新开发,可以使用现成的组件。stl是c++的一部分,内建在c++ 编译器中,因此不用额外安装什么

  • stl可分为六部分:

容器(containers)
迭代器(iterators)
空间配置器(allocator)
配接器(adapters)
算法(algorithms)
仿函数(functors)

 

 

stl简介

  • 容器

    • 特殊的数据结构,实现了数组、链表、队列、等等,实质是模板类。

    • 每一种容器都有其优缺点,为满足程序的各种需求,stl准备了多种容器类型。

  • 迭代器

    • 一种复杂的指针,可以通过其读写容器中的对象,实质是模板类。

    • 用于在遍历对象群集的元素,对象群集可能是容器,有可能是容器的一部分。

    • 主要用途是为容器提供一组很小的公共接口,利用这个接口,某项操作可以进行群集内的下一个元素

  • 算法

    • 读写容器对象的逻辑算法:排序、遍历、查找、等等,实质是模板函数

    • 所有容器的迭代器都提供一致的接口,通过迭代器的协助,算法程序可以用于任意容器。

  • 空间配置器

    • 容器的空间配置管理模板类

  • 配接器

    • 用来修饰容器、仿函数、迭代器接口

  • 组件间的关系

    • 容器通过配置器取得数据储存空间,算法通过迭代器 存取容器 内容,仿函数可以协助算法完成不用的策略变化,配接器可以修饰或套接仿函数。

  • stl的一个重要特点是数据结构和算法的分离 。这种分离使得stl变得非常通用

  • stl另一个重要特性是它不是面向对象 。为了具有足够通透性,stl主要依赖于模板而不是封装、继承和多态。

标准容器

  • stl标准模板库是一种泛型编程。泛型编程关注的是算法,在c++中,利用模板完成编写独立于数据类型的代码。

  • stl容器包括:数组、链表、队列等等;能进行查找、排序、随机排队等等。

  • stl序列容器:vector、deque、list

  • stl关联容器:set、mulitiset、map、mulitimap

  • stl迭代器:iterator

stl序列容器

  • vector

    • 将元素置于一个动态数组中加以管理,可以随机存取元素(用索引直接存取),数组尾部添加或移除元素非常快速 ,但是在中部或者头部安插元素比较费时

  • deque

    • 是“double-ended queue” 的缩写,可以随机存取元素(用索引直接存取),数组头部和尾部添加和尾部添加或移除元素都非常快速 ,但是在中部或头部安插元素比较费时

  • list

    • 双向链表,不提供随机存取(按顺序走到需存取的元素),在任何位置上执行插入或删除动作都非常迅速 ,内部只需调整一下指针

stl关联容器

  • set/multiset

    • 内部的元素依据其值自动排序,set内的相同数值的元素只能出现一次,multisets内可包含多个数值相同的元素 ,内部由二叉树实现(实际上基于红黑树(rb-tree)实现),便于查找。

  • map/multimap

    • map的元素是成对的键值/实值,内部的元素依据其值自动排序,map内的相同数值的元素只能出现一次,multimap内可包含多个数值相同的元素,内部由二叉树实现(实际上基于红黑树实现),便于查找

  • 其它一些容器:

    • hash_map,hash_set,hash_multiset,hash_multimap

教程地址: