基本概念

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. MongoDB 征途

    到目前为止,对数据库这块仍然捉襟见肘,仅限于懂一些MySQL,就更谈不上什么优化了. 细想来,还是没有项目驱动造成的...既然跟关系型数据库缘分未到,干脆直接go to NoSQL - MongoDB ...

  2. 升级到Scriptcase 8.0的注意事项

    Scriptcase的最新版本号v8.0已经正式公布了,因为国外下载较慢,我们在百度云盘创建了下载地址: http://pan.baidu.com/s/1qWwh6bi (Windows可运行文件)大 ...

  3. 1069: [SCOI2007]最大土地面积

    1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 2961  Solved: 1162[Submit][Sta ...

  4. EasyDarwin开源流媒体服务器性能瓶颈分析及优化方案设计

    EasyDarwin现有架构介绍 EasyDarwin的现有架构对网络事件的处理是这样的,每一个Socket连接在EasyDarwin内部的对应存在形式就是一个Session,不论是RTSP服务对应的 ...

  5. spring boot 使用redis 及redis工具类

    1-添加maven依赖 2-添加redis配置 3-工具类 1-添加maven依赖 实际上是封装了jedis <!-- redis 依赖--> <dependency> < ...

  6. js中的命名空间

    尽量不要使用全局变量,防止环境污染和命名冲突. 所以,将全局变量放在一个命名空间下,是一个好的解决方案. 静态命名空间 1. 直接赋值 这是最基本的方法,但是它很啰嗦,你得重复书写多次变量名.好处是它 ...

  7. 003-更改pip的源让下载安装更加快捷

    1 找到pip目录 C:\Python36\Lib\site-packages\pip\models 2 修改下面的index.py文件 将url设定为 https://pypi.douban.com ...

  8. (转)vim 访问系统剪贴板

    原文出处:http://vim.wikia.com/wiki/Accessing_the_system_clipboard Please review this tip: This tip was i ...

  9. 【CQ18高一暑假前挑战赛5】标程

    [A:暴力] #include<bits/stdc++.h> using namespace std; ; int a[maxn],vis[maxn],N,M; int main() { ...

  10. caffe参数详解

     转载自:https://blog.csdn.net/qq_14845119/article/details/54929389 solver.prototxt net:训练预测的网络描述文件,trai ...