当前位置: 首页 > news >正文

STL 标准模板库

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

 

组成:

  STL可分为容器(containers)、迭代器(iterators)、空间配置器(allocator)、配接器(adapters)、算法(algorithms)、仿函数(functors)六个部分。

 

容器部分主要由头文件<vector>,<list>,<deque>,<set>,<map>,<stack>和<queue>组成。对于常用的一些容器和容器适配器(可以看作由其它容器实现的容器),可以通过下表总结一下它们和相应头文件的对应关系。

序列式容器
  • 向量(vector) 连续存储的元素<vector>
  • 列表(list) 由节点组成的双向链表,每个结点包含着一个元素<list>
  • 双端队列(deque) 连续存储的指向不同元素的指针所组成的数组<deque>

容器适配器

  • 栈(stack) 后进先出的值的排列 <stack>
  • 队列(queue) 先进先出的值的排列 <queue>
  • 优先队列(priority_queue) 元素的次序是由作用于所存储的值对上的某种谓词决定的的一种队列 <queue>

关联式容器

  • 集合(set) 由节点组成的红黑树,每个节点都包含着一个元素,节点之间以某种作用于元素对的谓词排列,没有两个不同的元素能够拥有相同的次序 <set>
  • 多重集合(multiset) 允许存在两个次序相等的元素的集合 <set>
  • 映射(map) 由{键,值}对组成的集合,以某种作用于键对上的谓词排列 <map>
  • 多重映射(multimap) 允许键对有相等的次序的映射 <map>

 

迭代器 在STL中很常见,用于联系算法和容器,几乎STL提供的所有算法都是通过迭代器存取元素序列进行工作的,每一个容器都定义了其本身所专有的迭代器,用以存取容器中的元素。

迭代器部分主要由头文件<utility>,<iterator>和<memory>组成。<utility>是一个很小的头文件,它包括了贯穿使用在STL中的几个模板的声明,<iterator>中提供了迭代器使用的许多方法,而对于<memory>的描述则十分的困难,它以不同寻常的方式为容器中的元素分配存储空间,同时也为某些算法执行期间产生的临时对象提供机制,<memory>中的主要部分是模板类allocator,它负责产生所有容器中的默认分配器。

 

算法

算法部分主要由头文件<algorithm>,<numeric>和<functional>组成。<algorithm>是所有STL头文件中最大的一个(尽管它很好理解),它是由一大堆模版函数组成的,可以认为每个函数在很大程度上都是独立的,其中常用到的功能范围涉及到比较、交换、查找、遍历操作、复制、修改、移除、反转、排序、合并等等。<numeric>体积很小,只包括几个在序列上面进行简单数学运算的模板函数,包括加法和乘法在序列上的一些操作。<functional>中则定义了一些模板类,用以声明函数对象。

 

 

 

转载于:https://www.cnblogs.com/Wlnhome/p/7040518.html

相关文章:

  • Servlet 详解
  • I/O流
  • 菜鸟学习Redis(二)——Redis集群
  • 行为模式--代理Proxy模式(Java)
  • python 类的特殊成员
  • 修改敏感字
  • Java内部类
  • $.ajax中的eval及dataType
  • https 安全验证问题
  • 平安科技移动开发二队技术周报(第八期)
  • ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired
  • codevs 2074 营救 WW
  • 范式1F2F3F
  • 品牌管理之万变与不变——From 品牌管理培训
  • Nginx(四)-- 配置文件之location
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • canvas 高仿 Apple Watch 表盘
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • js写一个简单的选项卡
  • Laravel 实践之路: 数据库迁移与数据填充
  • LeetCode29.两数相除 JavaScript
  • miaov-React 最佳入门
  • Otto开发初探——微服务依赖管理新利器
  • Swoft 源码剖析 - 代码自动更新机制
  • 程序员最讨厌的9句话,你可有补充?
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 反思总结然后整装待发
  • 高度不固定时垂直居中
  • 判断客户端类型,Android,iOS,PC
  • 使用 Docker 部署 Spring Boot项目
  • 使用putty远程连接linux
  • 物联网链路协议
  • 在Mac OS X上安装 Ruby运行环境
  • !$boo在php中什么意思,php前戏
  • # Panda3d 碰撞检测系统介绍
  • (0)Nginx 功能特性
  • (06)Hive——正则表达式
  • (4) PIVOT 和 UPIVOT 的使用
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (译)2019年前端性能优化清单 — 下篇
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (转)ObjectiveC 深浅拷贝学习
  • (转)shell调试方法
  • .md即markdown文件的基本常用编写语法
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .NET BackgroundWorker
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?