STL(一)

泛型程序设计


  • 泛型编程(generic programming)
  • 将程序写的竟可能通用
  • 将算法从数据结构中抽象出来,成为通用的
  • C++的模板为泛型程序设计奠定了关键的基础

什么是STL


  • STL(Standard Template Library),即标准模板库,是一个高效的C++程序库
  • 包含了诸多在计算机科学领域中常用的基本数据结构和基本算法。为广大的C++程序员提供了一个可扩展的应用框架,高度体现了软件的可复用性。
  • 从逻辑层次来看,STL中体现了泛型化程序设计的思想(generic programming)
    • 在这种思想里,大部分基本算法被抽象,被泛化,独立于与之对应的数据结构,用于以相同或相近的方式处理各种不同情形
  • 从实现层次来看,整个STL是一种类型参数化(type parameterized)的方式实现的
    • 基于模板

STL组件


  • Container(容器) 各种基本数据结构
  • Adapter(适配器) 可改变containers、Iterators或Function object接口的一种组件
  • Algorithm(算法) 各种基本算法如sort、search …等
  • Iterator(迭代器) 连接containers和algorithms
  • Function object(函数对象)
  • Allocator(分配器)

容器、算法、迭代器的关系

这里写图片描述

容器


  • 容器类是容纳、包含一组元素或元素集合的对象

  • 其中基本容器:

    • 向量(vector)、双端队列(deque)、列表(list)、集合(set)、多重集合(multiset)、映射(map)和多重映射(multimap)
  • 标准容器的成员绝大部分都具有共同的名称

这里写图片描述

序列式容器和关联式容器


  • 序列式容器
    • 序列式容器Sequence containers,其中每个元素均有固定的位置——取决于插入时机和地点,和元素值无关。(vector、deque、list)
  • 关联式容器
    • 关联式容器Associative containers,元素为止取决于特定的排序准则以及元素值,和插入次序无关。(set、multiset、map、multimap)

如何选择序列式容器


  • 需要频繁在序列中间位置上进行插入和/或删除操作且不需要过多的在序列内进行长距离的跳转。应该选择list
  • vector头部与中间插入删除效率较低,在尾部插入删除效率高 (支持下标访问)
  • deque是在头部和尾部插入与删除效率较高 (支持下标访问)

迭代器


  • 迭代器Iterator,用来在对象群集(collection of obejcts)的元素上进行遍历。这个对象群集或许是个容器,或许是个容器的一部分。迭代器的主要好处是,为所有容器提供了一组很小的公共接口。迭代器以++进行累进,以*进行提领,因而它类似于指针,我们把它视为一种smart pointer

  • 比如++操作可以遍历至群集内的下一个元素。至于如何做到,取决于容器内部的数据组织形式

  • 每种容器都提供了自己的迭代器,而这些迭代器能够了解容器的数据结构


算法


  • 算法Algorithms,用来处理群集内的元素。他们可以处于不同的目的而搜索、排序、修改、使用那些元素。通过迭代器的协助,我们可以只需编写一次算法,他可以将它应用于任意容器,这是因为所有的容器迭代器都提供一直的接口

适配器


  • 适配器是一种接口类
    • 为已有的类提供新的接口
    • 目的是简化、约束、使之安全、隐藏或者改变被修改类提供的服务集合
  • 三种类型的适配器
    • 容器适配器: 用来扩展7中基本容器,它们和顺序容器相结合构成栈、队列、优先队列容器
    • 迭代器适配器: 反向迭代器、插入迭代器、IO流迭代器
    • 函数适配器: 函数对象适配器、成员函数适配器、普通函数适配器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值