C++进阶STL剖析
郑亚帅
热爱编程,热爱生活。
展开
-
STL运用的C++技术(1)——成员模板
STL是C++标准库的重要组成部分之一,它不仅是一个可复用的组件库,更是一个包含算法与数据结构的软件框架,同时也是C++泛型编程的很好例子。STL中运用了许多C++的高级技术。本文介绍成员模板的运用。主要参考了《C++ Primer》和《STL源码剖析》。 成员模板 member template 任意类(模板或非模板)可以拥有本身为类模板或函数模板转载 2016-05-31 10:56:57 · 366 阅读 · 0 评论 -
STL系列之queue 单向队列解析
queue单向队列与栈有点类似,一个是在同一端存取数据,另一个是在一端存入数据,另一端取出数据。单向队列中的数据是先进先出(First In First Out,FIFO)。在STL中,单向队列也是以别的容器作为底部结构,再将接口改变,使之符合单向队列的特性就可以了。单向队列一共6个常用函数(front()、back()、push()、pop()、empty()、size())原创 2016-06-03 10:04:51 · 1181 阅读 · 0 评论 -
STL系列之stack栈
栈(statck)这种数据结构。栈中的数据是先进后出的(First In Last Out, FILO)。栈只有一个出口,允许新增元素(只能在栈顶上增加)、移出元素(只能移出栈顶元素)、取得栈顶元素等操作。在STL中,栈是以别的容器作为底部结构,再将接口改变,使之符合栈的特性就可以了。因此实现非常的方便。下面就给出栈的函数列表和VS2008中栈的源代码,在STL中栈一共就5个常用操作函数(top(原创 2016-06-03 10:01:27 · 279 阅读 · 0 评论 -
STL系列之deque双向队列的问题
deque双向队列是一种双向开口的连续线性空间,可以高效的在头尾两端插入和删除元素,deque在接口上和vector非常相似。deque的实现比较复杂,内部会维护一个map(注意!不是STL中的map容器)即一小块连续的空间,该空间中每个元素都是指针,指向另一段(较大的)区域,这个区域称为缓冲区,缓冲区用来保存deque中的数据。因此deque在随机访问和遍历数据会比vector慢。原创 2016-06-03 09:55:11 · 269 阅读 · 0 评论 -
STL运用的C++技术(7)——代码整合
本文将6篇文章中出现的代码整合在一起,主要参考了HP的STL源码。通过这些代码,不仅可以看到这些C++技术在STL中的运用,同时也能大致了解STL的架构组织及实现方法。首先给出一个测试用例,所有代码都是自定义的,未用到STL。读者可以建立一个C++工程,把这些代码加进去,就可以运行起来。方便之处在于,读者可以修改这些代码,实现一些自己的功能,以加深对于STL的理解。 STL真转载 2016-05-31 11:02:40 · 380 阅读 · 0 评论 -
STL运用的C++技术(6)——函数对象
STL是C++标准库的重要组成部分之一,它不仅是一个可复用的组件库,更是一个包含算法与数据结构的软件框架,同时也是C++泛型编程的很好例子。STL中运用了许多C++的高级技术。本文介绍函数对象,其实是接上一篇的话题,因为函数对象本质上还是重载操作符。主要参考了《C++ Primer》和《STL源码剖析》。 可以为类类型的对象重载函数调用操作符,定义了调用操作符的类,其对象称之为函转载 2016-05-31 11:01:32 · 337 阅读 · 0 评论 -
STL运用的C++技术(5)——重载操作符
STL是C++标准库的重要组成部分之一,它不仅是一个可复用的组件库,更是一个包含算法与数据结构的软件框架,同时也是C++泛型编程的很好例子。STL中运用了许多C++的高级技术。本文介绍重载操作符。主要参考了《C++ Primer》和《STL源码剖析》。 重载操作符是具有特殊名称的函数:保留了operator后接需定义的操作符符号。这是《C++ Primer》中的定义。在STL中转载 2016-05-31 11:00:05 · 444 阅读 · 0 评论 -
STL运用的C++技术(4)——重载函数
STL是C++标准库的重要组成部分之一,它不仅是一个可复用的组件库,更是一个包含算法与数据结构的软件框架,同时也是C++泛型编程的很好例子。STL中运用了许多C++的高级技术。本文介绍重载函数。主要参考了《C++ Primer》和《STL源码剖析》。 有人会问,STL大量运用了模板,哪里用过重载函数呢?首先介绍重载函数的概念。出现在相同作用域中的两个函数,如果具有相同的名字而形转载 2016-05-31 10:59:24 · 430 阅读 · 0 评论 -
STL运用的C++技术(3)——模板实参推断
STL是C++标准库的重要组成部分之一,它不仅是一个可复用的组件库,更是一个包含算法与数据结构的软件框架,同时也是C++泛型编程的很好例子。STL中运用了许多C++的高级技术。本文介绍模板实参推断的运用。主要参考了《C++ Primer》和《STL源码剖析》。 STL利用模板模板实现的,比如它的算法都是一个个的函数模板。我们知道模板是一个公式或是蓝图,本身不是类或是函数,需进行转载 2016-05-31 10:58:49 · 318 阅读 · 0 评论 -
STL运用的C++技术(2)——模板特化
STL是C++标准库的重要组成部分之一,它不仅是一个可复用的组件库,更是一个包含算法与数据结构的软件框架,同时也是C++泛型编程的很好例子。STL中运用了许多C++的高级技术。本文介绍模板特化技术的运用。主要参考了《C++ Primer》和《STL源码剖析》。 STL中大量运用了模块,可以说模板是创建类或函数的公式。但是,我们并不总能写出对所有可能被实例化的类型都最合适的模板。举个转载 2016-05-31 10:58:16 · 527 阅读 · 0 评论 -
STL系列 heap 堆-解析
STL中与堆相关的4个函数——建立堆make_heap(),在堆中添加数据push_heap(),在堆中删除数据pop_heap()和堆排序sort_heap():头文件 #include 下面的_First与_Last为可以随机访问的迭代器(指针),_Comp为比较函数(仿函数),其规则——如果函数的第一个参数小于第二个参数应返回true,否则返回false。建立堆原创 2016-06-03 10:18:06 · 339 阅读 · 0 评论