STL源码剖析
五山小新新
希望每天6点下班,然后逛超市,买水果,买牛奶,看美女。
展开
-
STL概论
1、容器(Containers):各种数据结构,如Vector,List,Deque,Set,Map,用来存放数据,STL容器是一种Class Template,就体积而言,这一部分很像冰山载海面的比率。2、算法(Algorithms):各种常用算法如Sort,Search,Copy,Erase,从实现的角度来看,STL算法是一种Function Templates。3、迭代器(I原创 2014-08-05 01:17:22 · 882 阅读 · 0 评论 -
SGI STL空间配置器详解(一)-第一级空间配置器
一、SGI STL配置器简介SGI STL的配置器与众不同,它与标准规范不同。如果要在程序中明确使用SGI配置器,那么应该这样写:[cpp] view plaincopyprint?vectorint,std::alloc> iv; 他的名字是alloc,而且不接受任何参数。标准配置器的名字是allocator,原创 2014-09-11 09:37:34 · 770 阅读 · 0 评论 -
C++之STL(十一):容器适配器(stack、 queue 、priority_queue)源码浅析与使用示例
一、容器适配器stackqueuepriority_queuestack、queue、priority_queue 都不支持任一种迭代器,它们都是容器适配器类型,stack是用vector/deque/list对象创建了一个先进后出容器;queue是用deque或list对象创建了一个先进先出容器;priority_queue是用vector/deque创建了一个排原创 2014-09-11 09:01:34 · 774 阅读 · 0 评论 -
C++之STL(十):迭代器适配器{(插入迭代器back_insert_iterator)、IO流迭代器(istream_iterator、ostream_iterator)}
一、迭代器适配器反向迭代器插入迭代器IO流迭代器其中反向迭代器可以参考以前的文章。二、插入迭代器插入迭代器实际上是一个输出迭代器(*it=; ++)back_insert_iteratorback_inserterfront_insert_iteratorfront_inserter原创 2014-09-11 08:58:41 · 1539 阅读 · 0 评论 -
C++之STL(九):函数适配器bind2nd 、mem_fun_ref 源码分析、函数适配器应用举例
一、适配器三种类型的适配器:容器适配器:用来扩展7种基本容器,利用基本容器扩展形成了栈、队列和优先级队列迭代器适配器:(反向迭代器、插入迭代器、IO流迭代器)函数适配器:函数适配器能够将仿函数和另一个仿函数(或某个值、或某个一般函数)结合起来。针对成员函数的函数适配器针对一般函数的函数适配器二、函数原创 2014-09-11 09:00:20 · 748 阅读 · 0 评论 -
C++之STL(八):函数对象、 函数对象与容器、函数对象与算法
一、函数对象1、函数对象(function object)也称为仿函数(functor)2、一个行为类似函数的对象,它可以没有参数,也可以带有若干参数。3、任何重载了调用运算符operator()的类的对象都满足函数对象的特征4、函数对象可以把它称之为smart function。5、STL中也定义了一些标准的函数对象,如果以功能划分原创 2014-09-11 08:59:36 · 562 阅读 · 0 评论 -
C++之STL(七):剩下5种算法代码分析与使用示例(remove 、rotate 、sort、lower_bound、accumulate)
一、移除性算法 (remove) C++ Code 1234567891011121314151617181920212223242526272829303132333435363738394041原创 2014-09-11 08:56:40 · 762 阅读 · 0 评论 -
C++之STL(六):变动性算法源代码分析与使用示例(copy_backward、 transform、 replace_copy_if 等)
我们把for_each 归类为非变动性算法,实际上它也可以算是变动性算法,取决于传入的第三个参数,即函数指针。如果在函数内对容器元素做了修改,那么就属于变动性算法。变动性算法源代码分析与使用示例:一、copy、copy_backward C++ Code 1234567891原创 2014-09-11 08:58:09 · 935 阅读 · 0 评论 -
C++之STL(五):非变动性算法源代码分析与使用示例( for_each、min_element 、find_if、search 等)
非变动性算法代码分析与示例:一、for_each C++ Code 1234567891011121314// TEMPLATE FUNCTION for_eachtemplate class _InIt, class _Fn1 > i原创 2014-09-11 08:57:13 · 782 阅读 · 0 评论 -
C++之STL(四):算法简介、7种算法分类
一、算法算法是以函数模板的形式实现的。常用的算法涉及到比较、交换、查找、搜索、复制、修改、移除、反转、排序、合并等等。算法并非容器类型的成员函数,而是一些全局函数,要与迭代器一起搭配使用。算法的优势在于只需实作一份,可以适应所有的容器,不必为每一种容器量订制。也可以与用户定义的容器搭配。算法尾词:_if比如find(按原创 2014-09-11 08:54:31 · 643 阅读 · 0 评论 -
C++之STL(三):迭代器类vector::iterator 和 vector::reverse_iterator 的实现、迭代器类型、常用的容器成员
一、迭代器迭代器是泛型指针普通指针可以指向内存中的一个地址迭代器可以指向容器中的一个位置STL的每一个容器类模版中,都定义了一组对应的迭代器类。使用迭代器,算法函数可以访问容器中指定位置的元素,而无需关心元素的具体类型。下面来稍微看一下vector::iterator 和 vector::reverse_iterato原创 2014-09-11 08:53:31 · 863 阅读 · 0 评论 -
C++之STL(二):实现简单容器模板类Vec(vector capacity 增长问题、allocator 内存分配器)
首先,vector 在VC 2008 中的实现比较复杂,虽然vector 的声明跟VC6.0 是一致的,如下: C++ Code 12template class _Ty, class _Ax = allocator >class vector;但在VC2008 中vector 还有原创 2014-09-11 08:08:20 · 1651 阅读 · 0 评论 -
SGI STL空间配置器详解(二)-第二级空间配置器
本文讲解SGI STL空间配置器的第二级配置器。相比第一级配置器,第二级配置器多了一些机制,避免小额区块造成内存的碎片。不仅仅是碎片的问题,配置时的额外负担也是一个大问题。因为区块越小,额外负担所占的比例就越大。额外负担是指动态分配内存块的时候,位于其头部的额外信息,包括记录内存块大小的信息以及内存保护区(判断是否越界)。要想了解详细信息,请参考MSVC或者其他malloc实现。原创 2014-09-11 09:40:37 · 766 阅读 · 0 评论