zoukankan      html  css  js  c++  java
  • [转贴]从零开始学C++之STL(一):STL六大组件简介

    一、STL简介


    (一)、泛型程序设计

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


    (二)、什么是STL

    1、STL(Standard Template Library),即标准模板库,是一个高效的C++程序库。
    2、包含了诸多在计算机科学领域里常用的基本数据结构和基本算法。为广大C++程序员们提供了一个可扩展的应用框架,高度体现了软件的可复用性

    3、从逻辑层次来看,在STL中体现了泛型化程序设计的思想(generic programming)

    在这种思想里,大部分基本算法被抽象,被泛化,独立于与之对应的数据结构,用于以相同或相近的方式处理各种不同情形。

    4、从实现层次看,整个STL是以一种类型参数化(type parameterized)的方式实现的

    基于模板(template)


    二、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)


    1、需要频繁在序列中间位置上进行插入和/或删除操作且不需要过多地在序列内部进行长距离跳转,应该选择list

    2、vector头部与中间插入删除效率较低,在尾部插入与删除效率高。
    3、deque是在头部与尾部插入与删除效率较高


    (二)、迭代器

    1、迭代器Iterators,用来在一个对象群集(collection of objects)的元素上进行遍历。这个对象群集或许是个容器,或许是容器的一部分。迭代器的主要好处是,为所有容器提供了一组很小的公共接口。迭代器 以++进行累进,以*进行提领,因而它类似于指针,我们可以把它视为一种smart pointer
    2、比如++操作可以遍历至群集内的下一个元素。至于如何做到,取决于容器内部的数据组织形式。
    3、每种容器都提供了自己的迭代器,而这些迭代器能够了解容器内部的数据结构。


    (三)、算法

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


    (四)、适配器

    1、适配器是一种接口类

    为已有的类提供新的接口

    目的是简化、约束、使之安全、隐藏或者改变被修改类提供的服务集合

    2、三种类型的适配器:

    容器适配器:用来扩展7种基本容器,它们和顺序容器相结合构成栈、队列和优先队列容器

    迭代器适配器(反向迭代器、插入迭代器、IO流迭代器)

    函数适配器(函数对象适配器、成员函数适配器、普通函数适配器)


    (五)、函数对象

    1、函数对象(function object)也称为仿函数(functor)
    2、一个行为类似函数的对象,它可以没有参数,也可以带有若干参数。
    3、任何重载了调用运算符operator()的类的对象都满足函数对象的特征
    4、函数对象可以把它称之为smart function。
    5、STL中也定义了一些标准的函数对象,如果以功能划分,可以分为算术运算、关系运算、逻辑运算三大类。为了调用这些标准函数对象,需要包含头文件<functional>。


    (六)、分配器

    负责空间配置与管理。从实现的角度来看,配置器是一个实现了动态空间配置、空间管理、空间释放的class template


    参考:

    C++ primer 第四版
    Effective C++ 3rd
    C++编程规范



  • 相关阅读:
    结构-行为-样式-有趣的函数
    结构-行为-样式-angularJs笔记
    Js-Html 前端系列--页面撑开头尾
    Java 实现下载
    Js-Html 前端系列--Ajax
    Js-Html 前端系列--checkbox
    Nutz中过滤特殊字符
    NUTZ中处理系统未捕获异常
    Thymeleaf 笔记
    Json 使用小结
  • 原文地址:https://www.cnblogs.com/redmondfan/p/3209307.html
Copyright © 2011-2022 走看看