二十二. 标准模板库

● STL基本介绍

标准模板库(STL, standard template library): C++提供的大量的函数模板(通用算法)和类模板。

※ 为什么我们一般不需要自己写模板?因为STL里已经为我们写好了。我们的任务是:学会使用它们。

STL(Standard Template Library),即标准模板库,由惠普实验室(HP Labs)开发, 是一个具有工业强度的、高效的C++程序库。它被容纳于C++标准程序库(C++ Standard Library)中,是ANSI/ISO C++标准中最新的也是极具革命性的一部分。

该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法,为广大C++程序员们提供了一系列具有良好结构的通用C++组件,它们都是可扩展的应用框架,高度体现了软件的可复用性。这种现象有些类似于Microsoft Visual C++中的MFC(Microsoft Foundation Class Library).

STL是最新的C++标准函数库中的一个子集,这个庞大的子集占据了整个库大约80%的分量。

※ 常见的C++组件有4种:类(class)、集合和容器(collection and container)、类库(class library)、应用框架(applicationframework)。

虽然STL是一个模板库,但其中也包含了其它一些内容。

一般来说,STL由如下的六大部分组成:容器(Containers)、算法(Algorithms) 、迭代器(Iterators) 、仿函数(Functors) 、配接器(Adapters) 、配置器(Allocators)。

核心是容器(数据结构), 算法, 迭代器(指向容器元素的指针).

STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器)。几乎所有的代码都采用了模板类和模板函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。

在C++标准中,STL被组织为13个头文件:<algorithm>、<deque>、<functional>、<iterator>、<vector>、<list>、<map>、<memory>、<numeric>、<queue>、<set>、<stack>和<utility>。

● 容器

容器: STL容器是一种class template, 用于管理数据的集合, 包括各种数据结构

包含在头文件<vector>, <list>, <deque>, <map>,<set>中

容器分为序列式容器(sequential container)和关联式容器(associative container)。

序列式容器主要有:vector, list, deque

关联式容器/结合式容器主要有:map,multimap,set,multiset, hash table

数据结构

描 述

实现头文件

向量(vector)

连续存储的元素`

<vector>

列表(list)

由节点组成的双向链表,每个节点包含着一个元素

<list>

双队列(deque)

连续存储的指向不同元素的指针所组成的数组

<deque>

集合(set)

由节点组成的红黑树,每个节点都包含着一个元素,节点之间以某种作用于元素对的谓词排列,没有两个不同的元素能够拥有相同的次序

<set>

多重集合(multiset)

允许存在两个次序相等的元素的集合

<set>

栈(stack)

后进先出的值的排列

<stack>

队列(queue)

先进先出的执的排列

<queue>

优先队列

(priority_queue)

元素的次序是由作用于所存储的值对上的某种谓词决定的的一种队列

<queue>

映射(map)

由{键,值}对组成的集合,以某种作用于键对上的谓词排列

<map>

多重映射

(multimap)

允许键对有相等的次序的映射

<map>

● 算法

算法: STL算法是function template

STL中的算法部分由头文件<algorithm>、<numeric>和<functional>组成。

STL提供了大约100个实现算法的模板函数,比如sort, search, copy, erase等, 用户可以通过调用一两个算法模板就可以完成所需要的功能.

● 迭代器

迭代器: STL迭代器是class template.

在面向对象编程中,一个迭代器是一个对象,更准确地说, 是指向容器元素的指针, 它允许遍历其它对象的元素,通常是容器或列表。

In object-oriented programming, an iterator is an object, or rather, which allows one to sequence through all of the elements contained in some other object, typically a container or list.

● C++标准库的成分

C++标准库: 可分为两部分:C++语言本身和C++标准库。

※ C++标准库中存在两套C的函数库, 一套是带有.h扩展名的, 而另一套则没有, 并且它们确实没有太大的不同.

(C/C++学习笔记) 二十二. 标准模板库的更多相关文章

  1. VSTO 学习笔记(十二)自定义公式与Ribbon

    原文:VSTO 学习笔记(十二)自定义公式与Ribbon 这几天工作中在开发一个Excel插件,包含自定义公式,根据条件从数据库中查询结果.这次我们来做一个简单的测试,达到类似的目的. 即在Excel ...

  2. 汇编入门学习笔记 (十二)—— int指令、port

    疯狂的暑假学习之  汇编入门学习笔记 (十二)--  int指令.port 參考: <汇编语言> 王爽 第13.14章 一.int指令 1. int指令引发的中断 int n指令,相当于引 ...

  3. Binder学习笔记(十二)—— binder_transaction(...)都干了什么?

    binder_open(...)都干了什么? 在回答binder_transaction(...)之前,还有一些基础设施要去探究,比如binder_open(...),binder_mmap(...) ...

  4. STL学习系列一:STL(标准模板库)理论基础

    STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称.现然主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间. STL的从广 ...

  5. java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)

    java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessCo ...

  6. Android学习笔记(十二)——实战:制作一个聊天界面

    //此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 运用简单的布局知识,我们可以来尝试制作一个聊天界面. 一.制作 Nine-Patch 图片 : Nine-Pa ...

  7. MySQL数据库学习笔记(十二)----开源工具DbUtils的使用(数据库的增删改查)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  8. JavaScript学习笔记(十二)——箭头函数(Arrow Function)

    在学习廖雪峰前辈的JavaScript教程中,遇到了一些需要注意的点,因此作为学习笔记列出来,提醒自己注意! 如果大家有需要,欢迎访问前辈的博客https://www.liaoxuefeng.com/ ...

  9. ASP.NET Core 2 学习笔记(十二)REST-Like API

    Restful几乎已算是API设计的标准,通过HTTP Method区分新增(Create).查询(Read).修改(Update)和删除(Delete),简称CRUD四种数据存取方式,简约又直接的风 ...

  10. 如鹏网学习笔记(十二)HTML5

    一.HTML5简介 HTML5是HTML语言第五次修改产生的新的HTML语言版本 改进主要包括: 增加新的HTML标签或者属性.新的CSS样式属性.新的JavaScript API等.同时删除了一些过 ...

随机推荐

  1. 第 8 章 容器网络 - 050 - 创建 overlay 网络

    在 host1 中创建 overlay 网络 ov_net1: docker network create -d overlay ov_net1 -d overlay 指定 driver 为 over ...

  2. JFinal3.0 sql管理与动态生成

    原文: 本节学习目标主要是使用JFinal中自带的Template Engin来实现对sql的管理.JFinal中为sql管理提供了3个指令#sql.#para.#namespace,来增强sql功能 ...

  3. 雷林鹏分享:XML 相关技术

    XML 相关技术 下面是一个 XML 技术的列表. XHTML (可扩展 HTML) 更严格更纯净的基于 XML 的 HTML 版本. XML DOM (XML 文档对象模型) 访问和操作 XML 的 ...

  4. EntityFramework4.5使用Expression类创建动态查询及动态查询导航属性

    创建动态查询 想在项目中实现一个灵活的动态查询类,参考http://www.cnblogs.com/lyj/archive/2008/03/25/1122157.html和http://www.cnb ...

  5. source code spark

    http://blog.csdn.net/pelick/article/category/1556747 http://www.cnblogs.com/hseagle/

  6. 4.1.4 Nim

    Problem description: 有n堆石子,每堆各有ai颗石子.A和B轮流从非空的石子堆中取走至少一颗石子.A先取,取光所有石子的一方获胜.当双方都采用最佳策略时,谁会获胜? 1<=n ...

  7. Codecraft-18 and Codeforces Round #458 (Div. 1 + Div. 2, combined)G. Sum the Fibonacci

    题意:给一个数组s,求\(f(s_a | s_b) * f(s_c) * f(s_d \oplus s_e)\),f是斐波那契数列,而且要满足\(s_a\&s_b==0\),\((s_a | ...

  8. win8.1安装密钥

    https://zhidao.baidu.com/question/374064869043943484.html

  9. Leetcode 120

    class Solution { public: int minimumTotal(vector<vector<int>>& triangle) { ) ][]; tr ...

  10. WDA基础十二:FREE PROGRAM SH (WDA TREE)

    一个需要用TREE展示搜索帮助的需求: 1.创建WDA程序:ZCATEGORY 2.Component Controller中添加节点: (说明,此节点仅在搜索帮助程序中使用,可以不用interfac ...