前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

STL

作者头像
对弈
发布2019-09-04 15:52:08
7960
发布2019-09-04 15:52:08
举报

STL:泛型程序设计(程序的通用性)

1、STL定义

代码语言:javascript
复制
   STL(标准模板库)惠普实验室开发的一系列软件的统称。STL的目的是标准化组件,这样就不用重新开发,可以使用现成的组件。STL现在是C++的一部分,被内建在你的编译系统之内。

2、STL头文件

代码语言:javascript
复制
   在C++标准中,STL被组织为下面的17个头文件:<algorithm>、<deque>、<functional>、<iterator>、<array>、<vector>、<list>、<forward_list>、<map>、<unordered_map>、<memory>、<numeric>、<queue>、<set>、<unordered_set>、<stack>、<utility>。

3、组成部分:

代码语言:javascript
复制
   STL可分为容器、迭代器、空间配置器、配接器、算法、仿函数六个部分。

容器部分主要由头文件、、、、

、以及组成。

序列式容器

代码语言:javascript
复制
  向量(vector)连续存储的元素<vector>

  列表(list)由节点组成的双向链表,每个结点包含着一个元素<list>

  双端队列(deque)连续存储的指向不同元素的指针所组成的数组<deque>

容器适配器

代码语言:javascript
复制
 栈(stack)后进先出的值的排列 <stack>

 队列(queue)先进先出的值的排列 <queue>

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

关联式容器

代码语言:javascript
复制
 集合(set)由节点组成的红黑树,每个节点都包含着一个元素,节点之间以某种作用于元素对的谓词排列,没有两个不同的元素能  够拥有相同的次序 <set>

多重集合(multiset)允许存在两个次序相等的元素的集合 <set>

映射(map)由{键,值}对组成的集合,以某种作用于键对上的谓词排列 <map>

多重映射(multimap)允许键对有相等的次序的映射 <map>

Stl =抽象出(算法+数据结构)以实现通用,是一套可拓展的框架

代码语言:javascript
复制
 Stl中的六大组件:
  1. 容器(数据结构)
  2. 算法
  3. 迭代器
  4. 函数对象(仿函数)(用于扩展)
  5. 分配器(用于扩展)
  6. 适配器
  7. 容器:

序列式容器:

Vector(可变长数组)

代码语言:javascript
复制
       数组有序,支持随机访问时间复杂度O1 一步到位

       Vector实际不可变长,当预先分配的空间不足时,会再分配更大的空间,然后把原有的值复制进去。(一维数组)

List(列表)

代码语言:javascript
复制
       大部分为双向列表,随机访问速度On,插入删除速度O1

       设计形式可能不同

Deque(双端队列)

代码语言:javascript
复制
       包含有一个Map中控器,每一个map中的键值对,值都指向一块连续的空间。

       (涉及2级指针)两端插入速度O1,随机访问速度O2+

关联式容器(通过红黑二叉树实现):

代码语言:javascript
复制
       (红黑树:通过旋转,实现自动左右平衡)运用二分法,便于随机查找

       随机访问的次一级选择

Set(通过序列号,随机访问元素)

Map(通过key,随机访问value)

Multiset(序号能重复)

Multimap(key能重复)

容器中的数据经过红黑树的重新排序。

  1. 适配器(改变对应接口的组件):

适配器,在STL中扮演着转换器的角色,本质上是一种设计模式,用于一种接口转换成另一种接口,从而使原本不兼容的接口能够很好地一起运作。

即添加或屏蔽原有组件中的一些功能。

改变容器的接口,称为容器适配器

代码语言:javascript
复制
       栈 stark

       队列queue

       优先队列

改变迭代器的接口,称为迭代器适配器

代码语言:javascript
复制
    反向迭代器

       插入迭代器

       IO迭代器

改变仿函数的接口,称为仿函数适配器

代码语言:javascript
复制
    函数对象适配器

       成员函数迭代器

       普通函数迭代器
  1. 算法(algorithm):

在算法头文件中,可以作用于任何一个容器中

  1. 迭代器

用于连接容器与算法,是一个统一的接口。

  1. 函数对象
  2. 分配器

声明:本文为原创,作者为 对弈,转载时请保留本声明及附带文章链接:http://www.duiyi.xyz/c%e5%ae%9e%e7%8e%b0%e9%9b%b7%e9%9c%86%e6%88%98%e6%9c%ba-55/

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-08-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档