STL-开篇
基本概念
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-开篇的更多相关文章
- 《InsideUE4》UObject(一)开篇
UE生UObject,UObject生万物 引言 在上个GamePlay专题,谈到UE创建游戏世界的时候(GamePlay架构(一)Actor和Component),简单的介绍了一下UObject的功 ...
- STL使用记录
1,map 对map实在不熟...赶紧记录一下用法吧. 后来再发现新的用法再补充吧 定义: map<int, int> m; 其中的int可以为自定义的任何类型. m[key值类型的变量] ...
- STL源码分析之空间配置器
前言 SGI STL将new的申请空间和调用构造函数的两个功能分开实现, 如果对new不太清楚的, 可以先去看看这一篇new实现再来看配置器也不迟. 本节是STL分析的第一篇, 主要分析STL各个部分 ...
- STL空间配置器源码分析(四)bitmap_allocator
一.摘要 bitmap_allocator是STL空间分配器的其中一种,它采用内存池策略,最多存储64条空闲链表(freelist,实际是一块空间连续的内存区,后面也称为超级块),每条空闲链表存储的内 ...
- 一年之计在于春,2015开篇:PDF.NET SOD Ver 5.1完全开源
前言: 自从我2014年下半年到现在的某电商公司工作后,工作太忙,一直没有写过一篇博客,甚至连14年股票市场的牛市都错过了,现在马上要过年了,而今天又是立春节气,如果再不动手,那么明年这个无春的年,也 ...
- ASP.NET Web API 开篇示例介绍
ASP.NET Web API 开篇示例介绍 ASP.NET Web API 对于我这个初学者来说ASP.NET Web API这个框架很陌生又熟悉着. 陌生的是ASP.NET Web API是一个全 ...
- 详细解说 STL 排序(Sort)
0 前言: STL,为什么你必须掌握 对于程序员来说,数据结构是必修的一门课.从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来.幸运的是这些理论都已经比较成熟,算 ...
- STL标准模板库(简介)
标准模板库(STL,Standard Template Library)是C++标准库的重要组成部分,包含了诸多在计算机科学领域里所常见的基本数据结构和基本算法,为广大C++程序员提供了一个可扩展的应 ...
- Entity Framework入门系列(1)-扯淡开篇
这是我在Cnblogs上的第一个系列,但愿能坚持下去: 惯例索引 Entity Framework入门系列(1)-开篇兼索引: Entity Framework入门系列(2)-初试Code First ...
- STL的std::find和std::find_if
std::find是用来查找容器元素算法,但是它只能查找容器元素为基本数据类型,如果想要查找类类型,应该使用find_if. 小例子: #include "stdafx.h" #i ...
随机推荐
- C#XML的序列化与反序列化
要序列化的对象的类: [Serializable]public class Person{private string name;public string Name{get{return name; ...
- 关于erlang的向上取整和向下取整
在erlang的API中,erlang:trunc/1 是就近取整,erlang:round/1是四舍五入的, 整理下:对于正数的向上和向下取整, %% 向上取整 ceil(N) -> T = ...
- Memcached服务端自动启动(转载)
Memcached服务端自动启动 原文链接:http://www.cnblogs.com/technet/archive/2011/09/11/2173485.html 经测试,要使得Memcach ...
- RDLC报表 报表数据 栏 快捷键
血淋淋的教训啊,这段时间用RDLC报表,创建报表后会在右边加载[服务器资源管理器][工具栏][报表数据]一些栏目 如图 [服务器资源管理器][工具栏]还好[报表数据]栏在开发的时候不小心点了X给关掉了 ...
- 我对Swift的几点疑问
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/caowenbin/article/details/31418773 Swift自问世 ...
- machine learning for hacker记录(4) 智能邮箱(排序学习&推荐系统)
本章是上一章邮件过滤技术的延伸,上一章的内容主要是过滤掉垃圾邮件,而这里要讲的是对那些正常的邮件是否可以加入个性化元素,由于每个用户关心的主题并非一样(有人喜欢技术类型的邮件或者购物促销方便的内容邮件 ...
- Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stoc
今天在使用yum安装文件时,出现了以下问题: root@localhost opt]# yum update Loaded plugins: fastestmirror Could not retri ...
- Android:SQLiteOpenHelper类(SQLlite数据库操作)详细解析
前言 SQLite数据库操作在Android开发中非常常用 今天我将带大家全面了解关于SQLite数据库的操作(增.删.查.改) 目录 1. SQLite数据库介绍 SQLite是Android内置的 ...
- codeforces A. Array 解题报告
题目链接:http://codeforces.com/problemset/problem/300/A 题目意思:给出n个数,将它们分成三批:1.所有数相乘的结果 < 0 2.所有数相乘的 ...
- 洛谷【P839】【NOI导刊】——数页码
题面 一道找规律好题... 首先,我们肯定只能一位一位的统计答案,考虑从高位向低位统计,显然这样要方便的多. 对于第i位,我们统计从$a[i+1]*10^i+0$到$a[i+1]*10^i+a[i]* ...