c 语言 string库,C语言编程必备资料(包括库函数,string类,stl库模板).docx
主笔: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相关推荐
- vs2017c语言程序添加图标,笔试编程必备技巧——Visual Studio 2017添加自定义代码片段...
本文目录 代码模板 代码片段功能 step by step 添加自定义代码片段 传送门--常用IDE实现代码片段的方法 代码模板 如何有限的笔试时间中提高编程效率?除了提高自身代码能力之外,事先的准备 ...
- python基础和第三方库 笔记(python基础完结包括高级用法,第三方库持续更新中...)
python基础 注:本笔记面向有一定基础的人 本笔记是本人快速复习python过程中记录的,不适合零基础的人学习python的主工具,可以作为辅工具,本笔记记录了入门阶段常用操作,如有错误的地方,希 ...
- Linux下的静态链接库和动态链接库编程
Linux下的静态链接库和动态链接库编程 参考: Linux下的静态链接库和动态链接库编程 - Histring - 博客园 Mac下静态库和动态库的创建和使用_C/C++_vincent2610的专 ...
- python进阶 多线程编程 —— threading和queue库实现多线程编程
python进阶 多线程编程 -- threading和queue库实现多线程编程) 摘要 多线程实现逻辑封装 模型参数选择实例 摘要 本文主要介绍了利用python的 threading和queue ...
- Qt框架与STL库之间的巅峰对决:差异、优缺点及适用场景
Qt框架与STL库之间的巅峰对决:差异.优缺点及适用场景 引言 对比的重要性 Qt框架与STL库简介 博客内容概览 Qt框架基础 Qt框架的特点与组成 Qt的信号槽机制 Qt容器类简介 数据结构的对比 ...
- 19.1 C++STL标准模板库大局观-STL总述、发展史、组成与数据结构谈
19.1 C++STL标准模板库大局观-STL总述.发展史.组成与数据结构谈 19.2 C++STL标准模板库大局观-容器分类与array.vector容器精解 19.3 C++STL标准模板库大局观 ...
- 关于c++ STL库的一些总结
本人使用c++的STL库的一些总结 文章目录 本人使用c++的STL库的一些总结 前言 String的相关测试 Map的细节测试 SET的相关测试 总结 前言 以下都是个人在使用c++stl的时候容易 ...
- 19.3 C++STL标准模板库大局观-容器的说明和简单应用例续
19.1 C++STL标准模板库大局观-STL总述.发展史.组成与数据结构谈 19.2 C++STL标准模板库大局观-容器分类与array.vector容器精解 19.3 C++STL标准模板库大局观 ...
- 2020年氟化工艺考试题库及氟化工艺考试资料
题库来源:安全生产模拟考试一点通公众号小程序 2020年氟化工艺考试题库及氟化工艺考试资料,包含氟化工艺考试题库答案和解析及氟化工艺考试资料练习.由安全生产模拟考试一点通公众号结合国家氟化工艺考试最新 ...
最新文章
- 突发 | Yann LeCun卸任!Facebook变天,做AI不能落地是不成了
- 使用npm link 创建本地模块
- 对象序列化(六):应用实例-WPF对象的XAML序列化
- web怎么用代码创造表格_Python新工具:用三行代码提取PDF表格数据
- VTK:可视化之TextureMapPlane
- 使用Spring AOP和番石榴速率限制器的节气门方法
- MUI框架 · 异步请求:mui.get()、mui.ajax()、mui.post() 技术罗列
- 直接拿来用!Vue.js 第三方常用插件盘点 | CSDN 博文精选
- mvn clean install时出现 java.lang.ClassCastException
- UVA10735 Euler Circuit题解
- C Tricks(三)—— 以一维数组的形式对二维数组赋值
- Daily scrum 10.12
- react router官方文档_利用 React 高阶组件实现一个面包屑导航
- FX2LP与FPGA的简单批量回环
- Dezender下载及使用说明
- 小游戏开发 手机QQ 微信 浏览器 扫码 Debug 调试输出 查看日志
- TPLink 无线网卡模拟AP无法上网问题
- .NET:持续进化的统一开发平台
- android EditText 设置弹出数字输入法键盘
- MT7628平台编程设计指南资料
热门文章
- python123数值运算_python基础篇【第二篇】:数据运算、数据类型
- BUUCTF(pwn)hgame2018_flag_server(简单的栈溢出)
- mysql mtq_MySQL基础知识 - osc_r3mtqivi的个人空间 - OSCHINA - 中文开源技术交流社区
- 【python教程】IO文件操作的常见用法
- Python基础教程:高阶函数和函数嵌套
- 用Python求出:1到某个数的奇数序列里一共出现了多少个3
- linux服务器curl,在Linux系统下使用curl自定义HTTP头的方法
- html类型转换函数,如何在JavaScript中转换数据类型?
- vscode html如何插入模板?(!)
- python timeit class Timer()类 timeit(string, string) repeat(string, string) default_timer() 耗时检测 执行速度