主笔:Angel,2016-9-28,当前版本,2.0

PAGE 1

目 录

1 STL 简介

2 顺序性容器

2.1 C++ VECTOR(向量容器)

2.2 C++ LIST(双向链表)

2.3 C++ DEQUE(双向队列)

2.4 三者比较

3 关联容器

3.1 特点

3.2 C++ SETS & MULTISETS

3.3 C++ MAPS & MULTIMAPS

4 容器适配器

4.1 特点

4.2 C++ STACKS(堆栈)

4.3 C++ QUEUES(队列)

4.4 C++ PRIORITY QUEUES(优先队列)

5 迭代器

5.1 解释

5.2 功能特点

6 C++标准库总结

6.1 容器

6.2 算法

6.3 函数对象

6.4 迭代器

6.5 分配器

6.6 数值

1 STL 简介

/reference/stl/更加详细的资料

C++ STL (Standard Template Library标准模板库) 是通用类模板和算法的集 合,它提供给程序员一些标准的数据结构的实现如 queues(队列), lists(链表), 和 stacks(栈)等.

C++ STL 提供给程序员以下三类数据结构的实现: 标准容器类

顺序性容器

vector 从后面快速的插入与删除,直接访问任何元素

deque 从前面或后面快速的插入与删除,直接访问任何元素

list 双链表,从任何地方快速插入与删除

关联容器

set 快速查找,不允许重复值

multiset 快速查找,允许重复值

map 一对多映射,基于关键字快速查找,不允许重复值

multimap 一对多映射,基于关键字快速查找,允许重复值

容器适配器

stack 后进先出

queue 先进先出

priority_queue 最高优先级元素总是第一个出列

程序员使用复杂数据结构的最困难的部分已经由STL完成. 如果程序员想使用包 含int数据的stack, 他只要写出如下的代码:

stack myStack;

接下来, 他只要简单的调用 push() 和 pop() 函数来操作栈. 借助 C++ 模板的 威力, 他可以指定任何的数据类型,不仅仅是int类型. STL stack实现了栈的功 能,而不管容纳的是什么数据类型.

2 顺序性容器

2.1 C++ Vector(向量容器)

是一个线性顺序结构。相当于数组,但其大小可以不预先指定,并且自动扩 展。它可以像数组一样被操作,由于它的特性我们完全可以将vector 看作动态数 组。

在创建一个vector 后,它会自动在内存中分配一块连续的内存空间进行数据存储,初始的空间大小可以预先指定也可以由vector 默认指定,这个大小即 capacity ()函数的返回值。当存储的数据超过分配的空间时vector 会重新分配 一块内存块,但这样的分配是很耗时的,在重新分配空间时它会做这样的动作:

首先,vector 会申请一块更大的内存块;

然后,将原来的数据拷贝到新的内存块中;

其次,销毁掉原内存块中的对象(调用对象的析构函数);

最后,将原来的内存空间释放掉。

如果vector 保存的数据量很大时,这样的操作一定会导致糟糕的性能(这也 是vector 被设计成比较容易拷贝的值类型的原因)。所以说vector 不是在什么情 况下性能都好,只有在预先知道它大小的情况下vector 的性能才是最优的。

vector 的特点:

指定一块如同数组一样的连续存储,但空间可以动态扩展。即它可以像数组 一样操作,并且可以进行动态操作。通常体现在push_back() pop_back() 。

随机访问方便,它像数组一样被访问,即支持[ ] 操作符和vector.at()

节省空间,因为它是连续存储,在存储数据的区域都是没有被浪费的,但是 要明确一点vector 大多情况下并不是满存的,在未存储的区域实际是浪费的。

在内部进行插入、删除操作效率非常低,这样的操作基本上是被禁止的。 Vector 被设计成只能在后端进行追加和删除操作,其原因是vector 内部的实现 是按照顺序表的原理。

只能在vector 的最后进行push 和pop ,不能在vector 的头进行push 和pop 。

当动态添加的数据超过vector 默认分配的大小时要进行内存的重新分配、拷 贝与释放,这个操作非常消耗性能。 所以要vector 达到最优的性能,最好在创 建vector 时就指定其空间大小。

Vectors 包含着一系列连续存储的元素,其行为和数组类似。访问Vector中的 任意元素或从末尾添加元素都可以在常量级时间复杂度内完成,而查找特

c 语言 string库,C语言编程必备资料(包括库函数,string类,stl库模板).docx相关推荐

  1. vs2017c语言程序添加图标,笔试编程必备技巧——Visual Studio 2017添加自定义代码片段...

    本文目录 代码模板 代码片段功能 step by step 添加自定义代码片段 传送门--常用IDE实现代码片段的方法 代码模板 如何有限的笔试时间中提高编程效率?除了提高自身代码能力之外,事先的准备 ...

  2. python基础和第三方库 笔记(python基础完结包括高级用法,第三方库持续更新中...)

    python基础 注:本笔记面向有一定基础的人 本笔记是本人快速复习python过程中记录的,不适合零基础的人学习python的主工具,可以作为辅工具,本笔记记录了入门阶段常用操作,如有错误的地方,希 ...

  3. Linux下的静态链接库和动态链接库编程

    Linux下的静态链接库和动态链接库编程 参考: Linux下的静态链接库和动态链接库编程 - Histring - 博客园 Mac下静态库和动态库的创建和使用_C/C++_vincent2610的专 ...

  4. python进阶 多线程编程 —— threading和queue库实现多线程编程

    python进阶 多线程编程 -- threading和queue库实现多线程编程) 摘要 多线程实现逻辑封装 模型参数选择实例 摘要 本文主要介绍了利用python的 threading和queue ...

  5. Qt框架与STL库之间的巅峰对决:差异、优缺点及适用场景

    Qt框架与STL库之间的巅峰对决:差异.优缺点及适用场景 引言 对比的重要性 Qt框架与STL库简介 博客内容概览 Qt框架基础 Qt框架的特点与组成 Qt的信号槽机制 Qt容器类简介 数据结构的对比 ...

  6. 19.1 C++STL标准模板库大局观-STL总述、发展史、组成与数据结构谈

    19.1 C++STL标准模板库大局观-STL总述.发展史.组成与数据结构谈 19.2 C++STL标准模板库大局观-容器分类与array.vector容器精解 19.3 C++STL标准模板库大局观 ...

  7. 关于c++ STL库的一些总结

    本人使用c++的STL库的一些总结 文章目录 本人使用c++的STL库的一些总结 前言 String的相关测试 Map的细节测试 SET的相关测试 总结 前言 以下都是个人在使用c++stl的时候容易 ...

  8. 19.3 C++STL标准模板库大局观-容器的说明和简单应用例续

    19.1 C++STL标准模板库大局观-STL总述.发展史.组成与数据结构谈 19.2 C++STL标准模板库大局观-容器分类与array.vector容器精解 19.3 C++STL标准模板库大局观 ...

  9. 2020年氟化工艺考试题库及氟化工艺考试资料

    题库来源:安全生产模拟考试一点通公众号小程序 2020年氟化工艺考试题库及氟化工艺考试资料,包含氟化工艺考试题库答案和解析及氟化工艺考试资料练习.由安全生产模拟考试一点通公众号结合国家氟化工艺考试最新 ...

最新文章

  1. 突发 | Yann LeCun卸任!Facebook变天,做AI不能落地是不成了
  2. 使用npm link 创建本地模块
  3. 对象序列化(六):应用实例-WPF对象的XAML序列化
  4. web怎么用代码创造表格_Python新工具:用三行代码提取PDF表格数据
  5. VTK:可视化之TextureMapPlane
  6. 使用Spring AOP和番石榴速率限制器的节气门方法
  7. MUI框架 · 异步请求:mui.get()、mui.ajax()、mui.post() 技术罗列
  8. 直接拿来用!Vue.js 第三方常用插件盘点 | CSDN 博文精选
  9. mvn clean install时出现 java.lang.ClassCastException
  10. UVA10735 Euler Circuit题解
  11. C Tricks(三)—— 以一维数组的形式对二维数组赋值
  12. Daily scrum 10.12
  13. react router官方文档_利用 React 高阶组件实现一个面包屑导航
  14. FX2LP与FPGA的简单批量回环
  15. Dezender下载及使用说明
  16. 小游戏开发 手机QQ 微信 浏览器 扫码 Debug 调试输出 查看日志
  17. TPLink 无线网卡模拟AP无法上网问题
  18. .NET:持续进化的统一开发平台
  19. android EditText 设置弹出数字输入法键盘
  20. MT7628平台编程设计指南资料

热门文章

  1. python123数值运算_python基础篇【第二篇】:数据运算、数据类型
  2. BUUCTF(pwn)hgame2018_flag_server(简单的栈溢出)
  3. mysql mtq_MySQL基础知识 - osc_r3mtqivi的个人空间 - OSCHINA - 中文开源技术交流社区
  4. 【python教程】IO文件操作的常见用法
  5. Python基础教程:高阶函数和函数嵌套
  6. 用Python求出:1到某个数的奇数序列里一共出现了多少个3
  7. linux服务器curl,在Linux系统下使用curl自定义HTTP头的方法
  8. html类型转换函数,如何在JavaScript中转换数据类型?
  9. vscode html如何插入模板?(!)
  10. python timeit class Timer()类 timeit(string, string) repeat(string, string) default_timer() 耗时检测 执行速度