基本概念

STL: Standard Template Library,标准模板库

定义: c++引入的一个标准类库

特点:
1)数据结构和算法的 c++实现( 采用模板类和模板函数)
2)数据的存储和算法的分离
3)高复用性, 高移植性
组件:
1)容器( Container)
2)算法( Algorithm)
3)迭代器( Iterator)
4)仿函数( Function object)
5)适配器( Adaptor)(略)
6)空间配制器( allocator)(略)

容器

一共有两大类:分别是序列式容器关联式容器

定义:序列式容器的应用
分类:

序列式容器:
1)栈(stack) 后进先出的值的排列
2)队列(queue) 先进先出的值的排列
3)优先队列(priority_queue) 元素的次序是由作用于所存储的值对上的某种谓词决定的的一种队列
关联式容器:

定义:元素位置取决于特定的排序准则,和插入顺序无关。
分类:
1)集合(set/multiset)
2)内部的元素依据其值自动排序, Set 内的相同数值的元素只能出现一次,Multisets 内可包含多个数值相同的元素,内部由二叉树实现,便于查找
1)映射(map/multimap)
2)元素是成对的键值/实值,内部的元素依据其值自动排序, Map 内的相同数值的元素只能出现一次,Multimaps 内可包含多个数值相同的元素, 内部由二叉树实现,便于查找(实际上是红黑树的二叉树的变种)

算法

定义:如果说容器是数据的存储,那么算法就是操作, 只不过 stl 里面的算法都是模板函
数, 总共有 100 多个。比如算法 for_each 将为指定序列中的每一个元素调用指定的函数,
stable_sort 以 你所指定的规则对序列进行稳定性排序等等。这样一来,只要熟悉了 STL 之后,
许多代码可以被大大的化简,只需要通过调用一两个算法模板,就可以完成所需要 的功能
并大大地提升效率。
算法部分主要由头文件<algorithm>, <numeric>和<functional>组 成。 <algorithm>是所
有 STL 头文件中最大的一个(尽管它很好理解),它是由一大堆模版函数组成的,可以认为
每个函数在很大程度上 都是独立的,其中常用到的功能范围涉及到比较、交换、查找、遍
历操作、复制、修改、移除、反转、排序、合并等等。 <numeric>体积很 小,只包括几个在
序列上面进行简单数学运算的模板函数,包括加法和乘法在序列上的一些操作。 <functional>
中则定义了一些模板类, 用以声明函数对象。

迭代器

定义: 迭代器在 STL 中用来将算法和容器联系起来,起着一种黏和剂的作用。几乎 STL
提供的所有算法都是通 过迭代器存取元素序列进行工作的,每一个容器都定义了其本身所
专有的迭代器,用以存取容器中的元素。
迭代器部分主要由头文件<utility>,<iterator>和<memory>组 成。 <utility>是一个很小的
头文件,它包括了贯穿使用在 STL 中的几个模板的声明, <iterator>中提供了迭代器 使用的
许多方法,而对于<memory>的描述则十分的困难,它以不同寻常的方式为容器中的元素分
配存储空间,同时也为某些算法执行期间产生 的临时对象提供机制,<memory>中的主要部
分是模板类 allocator,它负责产生所有容器中的默认分配器。

仿函数

定义: 仿函数本身不是函数, 而是一个类对象, 因为类中重载了函数运算符(), 即
operator().所以类对象具有了类似函数的功能。 可以使模板重加的灵活。 后来的
lambada 的它升级版本。

图标总结:

共同特点

1)支持泛型
2)保存副本
3)内存管理

STL-开篇的更多相关文章

  1. 《InsideUE4》UObject(一)开篇

    UE生UObject,UObject生万物 引言 在上个GamePlay专题,谈到UE创建游戏世界的时候(GamePlay架构(一)Actor和Component),简单的介绍了一下UObject的功 ...

  2. STL使用记录

    1,map 对map实在不熟...赶紧记录一下用法吧. 后来再发现新的用法再补充吧 定义: map<int, int> m; 其中的int可以为自定义的任何类型. m[key值类型的变量] ...

  3. STL源码分析之空间配置器

    前言 SGI STL将new的申请空间和调用构造函数的两个功能分开实现, 如果对new不太清楚的, 可以先去看看这一篇new实现再来看配置器也不迟. 本节是STL分析的第一篇, 主要分析STL各个部分 ...

  4. STL空间配置器源码分析(四)bitmap_allocator

    一.摘要 bitmap_allocator是STL空间分配器的其中一种,它采用内存池策略,最多存储64条空闲链表(freelist,实际是一块空间连续的内存区,后面也称为超级块),每条空闲链表存储的内 ...

  5. 一年之计在于春,2015开篇:PDF.NET SOD Ver 5.1完全开源

    前言: 自从我2014年下半年到现在的某电商公司工作后,工作太忙,一直没有写过一篇博客,甚至连14年股票市场的牛市都错过了,现在马上要过年了,而今天又是立春节气,如果再不动手,那么明年这个无春的年,也 ...

  6. ASP.NET Web API 开篇示例介绍

    ASP.NET Web API 开篇示例介绍 ASP.NET Web API 对于我这个初学者来说ASP.NET Web API这个框架很陌生又熟悉着. 陌生的是ASP.NET Web API是一个全 ...

  7. 详细解说 STL 排序(Sort)

    0 前言: STL,为什么你必须掌握 对于程序员来说,数据结构是必修的一门课.从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来.幸运的是这些理论都已经比较成熟,算 ...

  8. STL标准模板库(简介)

    标准模板库(STL,Standard Template Library)是C++标准库的重要组成部分,包含了诸多在计算机科学领域里所常见的基本数据结构和基本算法,为广大C++程序员提供了一个可扩展的应 ...

  9. Entity Framework入门系列(1)-扯淡开篇

    这是我在Cnblogs上的第一个系列,但愿能坚持下去: 惯例索引 Entity Framework入门系列(1)-开篇兼索引: Entity Framework入门系列(2)-初试Code First ...

  10. STL的std::find和std::find_if

    std::find是用来查找容器元素算法,但是它只能查找容器元素为基本数据类型,如果想要查找类类型,应该使用find_if. 小例子: #include "stdafx.h" #i ...

随机推荐

  1. 什么是SDN(软件定义网络)(转载)

    软件定义网络(Software Defined Network, SDN)在InfoWorld于2011年11月公布的将影响未来10年的十项新技术中排名第二.2012年7月,SDN代表厂商Nicira ...

  2. RS-485接口的防护电路设计

    RS-485总线标准是安防系统设备上应用最为广泛的物理层协议之一.RS-485的主要特点:支持远距离传输,长达4000英尺:双向信号差分传输,提高信号的噪音抑制能力,并且允许一条总线上可以挂接多个发射 ...

  3. EasyRTSPClient:基于live555封装的支持重连的RTSP客户端RTSPClient

    今天先简单介绍一下EasyRTSPClient,后面的文章我们再仔细介绍EasyRTSPClient内部的设计过程: EasyRTSPClient:https://github.com/EasyDar ...

  4. Linux就该这么学--命令集合4(文件目录管理命令)

    1.touch命令用于创建空白文件与修改文件时间:(touch [选项] [文件]) 对于在Linux中的文件有三种时间: 更改时间(mtime):内容修改时间(不包括权限的) 更改权限(ctime) ...

  5. 关于myeclipse缓存问题

    昨天在部署项目的时候发现,刚检出的项目jdk竟然不是1.6版本的了,而是新的(在此之前每次检出项目都会重新设置一下jdk),如图所示: 当时还在想,真好,以后就不用配置了,但是随之而来的是一个重大问题 ...

  6. 建立FTP服务器(FTP服务器名要与创建的用户名一致)

    1新建用户 2. 3.建立FTP

  7. jQuery param()作用与使用方法

    $.param()方法是serialize()方法的核心,用来对一个数组或对象按照key/value进行序列化. $.param(obj) 返回 :string: 说明:将jquery对象按照name ...

  8. 【Advanced Windows Phone Programming】在windows phone 8中解码mp3 和编码pcm

    转眼间不做wp开发,投身于php事业已然一年了,转身看到8.1的发布,俨然一片欣欣向荣的景象,但是开发社区却没比一年前有过多大的提高,这并不是一个好现象,遂在git上开源了之前音频处理库,希望能对社区 ...

  9. 不使用库函数,编写函数int strcmp(char *source, char *dest) 相等返回0,不等返回-1【转】

    本文转载自:http://www.cppblog.com/mmdengwo/archive/2011/04/14/144253.aspx #include <stdio.h>#includ ...

  10. 如何在时间复杂度为O(n)空间复杂度为O(1)的情况下完成链表的逆置

    问题如题目,首先分析,链表的反转的空间复杂度如果为常数级,那么不可能完成从堆中申请数据来完成链表的反转工作,所以问题就转化为了如何将原链表修改/拆解为逆置的链表: 函数形式假定如下  void Inv ...