![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
STL模板库温习之路
Ym影子
做有技术深度的程序员
展开
-
STL allocator
一般而言,我们习惯的 C++ 内存配置操作和释放操作是这样的:1 class FOO{};2 FOO *pf = new FOO; 3 delete pf; 我们看其中第二行和第三行,虽然都是只有一句,当是都完成了两个动作。但你 new 一个对象的时候两个动作是:先调用::operator new 分配一个对象大小的内存,然后在这个内存上调用FOO::FOO()构造对象。同样,当你 d...转载 2018-02-27 10:00:03 · 182 阅读 · 0 评论 -
STL模板库第十一日 : 算法基础
前言: 算法部分主要由头文件<algorithm>,<numeric>和<functional>组成。 <algorithm>是所有STL头文件中最大的一个,其中常用到的功能范围涉及到比较、交换、查找、遍历操作、复制、修改、反转、排序、合并等等。 <numeric>体积很小,只包括几个在序列上面进行简单数学运算的模板函数,包括加法和乘法...原创 2018-02-22 09:29:49 · 116 阅读 · 0 评论 -
STL模板库第十日 : 配接器(adapters)
前言: 在容器部分结束后其实是一些坑留下来的,比如 STACK、queue等容器,并没有介绍,但是并不是表示它们不重要,恰恰相反,他们代表的思想可能更加需要重视:配接器的思想。在学习设计模式的时候,我们就知道有一种设计模式叫装饰器模式:《Design Patterns》对 Adapter 设计模式的定义如下:将一个 class 的接口转换为另一个 class 的接口,使原本因接口不兼容而不能合作的...原创 2018-02-22 09:21:04 · 132 阅读 · 0 评论 -
STL 第九日 : 容器篇总结
私房STL之vector一句话vector:vector的空间可扩充,支持随机存取访问,是一段连续线性的空间。所以它是动态空间,与之对比的array是静态的空间,不可扩充。简单来说,vector是数组的增强版。vector创建与遍历vector提供了几个版本的构造函数。详见:http://www.cplusplus.com/reference/stl/vector比如:vector<int&...转载 2018-02-20 16:02:11 · 161 阅读 · 0 评论 -
STL 模板库第八日 : set与multiset
set 容器前言:什么是set容器?map容器是键-值对的集合,好比以任命为键的地址和电话号码。而set容器只是单纯的键的集合。当只想知道一个值是否存在时,使用set容器是最适合。使用set容器必须包含set头文件:#include <set>set容器支持大部分map操作,包括: 关联容器中通用的操作。 三种构造函数。 insert操作。 count和find...原创 2018-02-20 15:52:06 · 235 阅读 · 0 评论 -
STL 模板库第七日 : List
一:List基础List简介 list是一个双向链表容器,可高效地进行插入删除元素。 list不可以随机存取元素,所以不支持at.(pos)函数与[]操作符。It++(ok) it+5(err) #include <list> list对象的默认构造list采用采用模板类实现,对象的默认构造形式:list<T> lstT; 如:list<int> ...原创 2018-02-19 08:53:49 · 153 阅读 · 0 评论 -
STL 模板库 第六日 : deque
STL 模板库 deque一:什么是deque所谓的deque是”double ended queue”的缩写,双端队列不论在尾部或头部插入元素,都十分迅速。而在中间插入元素则会比较费时,因为必须移动中间其他的元素。双端队列是一种随机访问的数据类型,提供了在序列两端快速插入和删除操作的功能,它可以在需要的时候改变自身大小,完成了标准的C++数据结构中队列的所有功能。Vector是单向开口的连续线性...原创 2018-02-19 08:18:30 · 304 阅读 · 1 评论 -
STL 模板库 第五日 : vector的使用
STL 模板库 vector一:什么是vector vector(向量):是一种顺序容器,事实上和数组差不多,但它比数组更优越。一般来说数组不能动态拓展,因此在程序运行的时候不是浪费内存,就是造成越界。而vector正好弥补了这个缺陷,它的特征是相当于可分配拓展的数组,它的随机访问快,在中间插入和删除慢,但在末端插入和删除快。 二:vector的本质是什么vector 是一个动态数组,它可...原创 2018-02-19 08:09:13 · 309 阅读 · 0 评论 -
STL 模板库第四日 :玩转 string
前言:C中是没有string这个类的(或者说就没有类的概念),C++ STL中提供了关于字符串操作的一系列操作,包括定义初始化,字符串算法,迭代器等等的一系列内容。下面是自己实现的一个简单的string类:#include <iostream>#include <cstring>using namespace std;class String{public: ...原创 2018-02-18 19:00:29 · 208 阅读 · 0 评论 -
STL 模板库第三日 :traits 技术
实在是写不出像下面这篇文章一样精髓的总结了,转载一把~转自:http://blog.csdn.net/my_business/article/details/7891687介绍traits的文章很多,但感觉大部分文章的说明都很晦涩难懂,把一个并不很复杂的C++模板的应用描述的过于复杂。忍不住想把自己的理解跟大家分享一下,或许我也只是掌握了一点traits的皮毛而已,但也希望这些皮毛能略微抓住你的眼...转载 2018-02-18 18:26:51 · 149 阅读 · 0 评论 -
STL 模板库第二日: 什么是空间配置器
一:什么是空间配置器?空间适配器,所谓空间适配器,就是用来管理内存的一个器具。对于STL来说,空间适配器是它可以正常工作的基础,也为它可以高效工作提供了动力。对于使用STL来说,它是不和用户直接打交道的,而是隐藏在一切STL组件之后,默默为各种内存申请提供支持的。对于c++用户来说,new和delete很熟悉,这两个函数可以分别完成内存的申请和释放,和c里面的malloc和free如出一辙,SGI...原创 2018-02-17 09:30:31 · 148 阅读 · 0 评论 -
STL 模板库第一日:什么是模板
在c++Template中非常多地方都用到了typename与class这两个关键字,并且好像能够替换,是不是这两个关键字全然一样呢? 答:class用于定义类,在模板引入c++后,最初定义模板的方法为:template,这里class关键字表明T是一个类型。后来为了避免class在这两个地方的使用可能给人带来混淆,所以引入了typename这个关键字。它的作用同class一样表明后面的符号为一个...原创 2018-02-16 18:48:53 · 202 阅读 · 0 评论 -
C++ STL模板库学习之路(前言)
在正式开始复习STL模板库之前,首先要知道什么是STL模板库。一:什么是STLSTL是Standard Template Library的简称,中文名标准模板库,惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。从根本上说,STL是一些“容器”的集合,这些“容器”有list,vector,se...原创 2018-02-16 18:43:43 · 175 阅读 · 0 评论 -
C++ STL: deque的实现原理
双端队列(deque)是一种支持向两端高效地插入数据、支持随机访问的容器。其内部实现原理如下:双端队列的数据被表示为一个分段数组,容器中的元素分段存放在一个个大小固定的数组中,此外容器还需要维护一个存放这些数组首地址的索引数组,如下图所示。由于分段数组的大小是固定的,并且它们的首地址被连续存放在索引数组中,因此可以对其进行随机访问,但效率比vector低很多。向两端加入新元素时,如果这一端的分段数...转载 2018-03-01 17:58:46 · 6571 阅读 · 2 评论