![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
STL
happylife1527
这个作者很懒,什么都没留下…
展开
-
STL源码剖析
http://blog.csdn.net/xuqiqw/article/details/7676787 学习编程的人都知道,阅读、剖析名家代码乃是提高水平的捷径。源码之前,了无秘密,尤其是为了效率无所不用其极的SGI STL。大师们的缜密思维、经验结晶、技术思路、独到风格,都原原本本体现在源码之中。在你仔细推敲之中,迷惑不解之时,恍然大悟之际,你的经验、思维、视野、知识乃至技术品位都会转载 2012-09-18 22:36:51 · 1104 阅读 · 0 评论 -
STL源码剖析学习十九:配接器
http://www.cnblogs.com/w0w0/archive/2012/05/01/2477826.htmlhttp://www.cnblogs.com/w0w0/tag/stl/转载 2012-09-20 09:57:03 · 409 阅读 · 0 评论 -
函数对象/仿函数
提到C++ STL,首先被人想到的是它的三大组件:Containers, Iterators, Algorithms,即容器,迭代器和算法。容器为用户提供了常用的数据结构,算法大多是独立于容器的常用的基本算法,迭代器是由容器提供的一种接口,算法通过迭代器来操控容器。接下来要介绍的是另外的一种组件,函数对象(Function Object,JJHou译作Functor仿函数)。什么是函数对象转载 2012-09-20 11:12:29 · 2577 阅读 · 0 评论 -
STL六大组件简介
1、容器(Containers):各种数据结构,如Vector,List,Deque,Set,Map,用来存放数据,STL容器是一种Class Template,就体积而言,这一部分很像冰山载海面的比率。2、算法(Algorithms):各种常用算法如Sort,Search,Copy,Erase,从实现的角度来看,STL算法是一种Function Templates。3、迭代器(Itera转载 2012-09-20 11:08:29 · 487 阅读 · 0 评论 -
STL堆算法性能分析与优化方法
http://www.cnblogs.com/rocketfan/archive/2009/11/28/1612665.html堆是常用的数据结构,经常用于实现优先队列中,huffman编码中的就用到了优先队列。本质上就是用数组实现的完全二叉树保证父节点的关键码都大于或者等于其子节点的关键码(最大堆,反过来是最小堆),下图是一个最大堆示意。那么在STL中有相应的堆算法,如判断一个序转载 2012-09-20 20:03:42 · 701 阅读 · 0 评论 -
STL源码剖析---STL容器特征总结(含迭代器失效)
http://java-mans.iteye.com/blog/1648324Vector1、内部数据结构:连续存储,例如数组。2、随机访问每个元素,所需要的时间为常量。3、在末尾增加或删除元素所需时间与元素数目无关,在中间或开头增加或删除元素所需时间随元素数目呈线性变化。4、可动态增加或减少元素,内存管理自动完成,但程序员可以使用reserve()成员函数来管理内存。5、转载 2012-09-22 15:37:32 · 323 阅读 · 0 评论 -
剖析内存的一点补充
内存就好像稀缺资源,永远也没法满足需求,只能对其进行高效而合理的配置和使用。要用好内存好的管理方法必不可少,现在比较广泛的方法是内存池。不同的内存池管理方法的实现各有其特点,SGI allocator分配器也不例外。SGI分配器没有适时调用原始的free释放一些blocks,侯捷老师对此说法是“这是 SGI allocator 值得加强的部分”。但是现有SGI分配器代码对此能不能加强?有没有必要加转载 2012-09-23 14:10:13 · 313 阅读 · 0 评论 -
STL源码剖析---vector
http://java-mans.iteye.com/blog/1648329vector容器概述vector的数据安排以及操作方式,与array非常相似。两者的唯一区别在于空间的运用的灵活性。array是静态空间,一旦配置了就不能改变;要换个大(或小)一点的房子,可以,一切琐细都得由客户端自己来:首先配置一块新空间,然后将元素从旧址一一搬往新址,再把原来的空间释还给系统。vector是动转载 2012-09-22 15:38:10 · 281 阅读 · 0 评论 -
关于set_new_handler(转载)
当运算符new找不到足够大的连续内存块来为对象分配内存时将会发生什么?一个称为 new-handler的函数被调用。对于new-handler的缺省动作是抛出一个异常。然而,如果我们在程序里用堆分配,至少要用“内存已用完”的信息代替 new-handler,并异常中断程序。用这个办法,在调试程序时会得到程序出错的线索。通过包含NEW. H,然后以我们想装入的函数地址为参数调用set_new转载 2012-11-19 20:49:50 · 297 阅读 · 0 评论 -
operator new与new operator
C++中的operator new与new operator,看上去挺像的两姐妹,却有天壤之别。operator new(1) 只分配所要求的空间,不调用相关对象的构造函数。当无法满足所要求分配的空间时,则 ->如果有new_handler,则调用new_handler,否则 ->如果没要求不抛出异常(以nothrow参数表达),则执行b转载 2012-11-19 20:40:01 · 294 阅读 · 0 评论 -
详述trait和policy演化
http://blog.csdn.net/arau_sh/article/details/5874510转自http://redwolf.blog.51cto.com/427621/90096 开博时发了一篇“trait和policy研习”的源码,很少有朋友关注,写的太简略,这一次把它展开来,发现一下子还写不完,分两次吧!希望和朋友们一起学习!转载 2012-09-20 00:13:15 · 364 阅读 · 0 评论 -
STL源码剖析---空间配置器
http://java-mans.iteye.com/blog/1648330看过STL空间配置器的源码,总结一下:1、STL空间配置器:主要分三个文件实现,stl_construct.h 这里定义了全局函数construct()和destroy(),负责对象的构造和析构。stl_alloc.h文件中定义了一、二两级配置器,彼此合作,配置器名为alloc. stl_uninitialize转载 2012-09-20 00:12:14 · 421 阅读 · 0 评论 -
iterator_traits( 转)
Reference Type 和 Pointer Type所谓左值(lValue):是用来代表某个对象的一个东西。如果p是指向类型为T的某个对象,那么表达式*p不能只是返回类型为T的对象,而必须是返回一个lValue(左值)。 平时总是拿起*p就直接赋值(对于简单基本类型,例如int *p = &I ; *p=3),没想什么*p返回左值那么多。但是当在自定义类中重栽*运算符的时候,我转载 2012-09-20 00:11:05 · 498 阅读 · 0 评论 -
迭代器(Iterator)
STL设计的精髓在于,把容器(Containers)和算法(Algorithms)分开,彼此独立设计,最后再用迭代器(Iterator)把他们粘合在一起。可见迭代器在STL中的重要程度。迭代器已经作为一种设计思想被记录与《设计模式》中,它的意图在于“提供一种方法顺序访问一个聚合对象中的各个元素,而又不需暴露该对象的内部表示”。 迭代器的作用其实相当于一个智能指针,它指向容器内部的数据,可以通转载 2012-09-18 22:58:17 · 493 阅读 · 0 评论 -
SGI STL 的内存管理
http://www.cnblogs.com/sld666666/archive/2010/07/01/1769448.html1. 好多废话 在分析完nginx的内存池之后,也想了解一下C++的内存管理,于是就很自然得想到STL。STL是一个重量级的作品,据说当时的出现,完全可以说得上是一个划时代意义的作品。泛型、数据结构和算法的分离、底耦合、高复用… 啊,废话不多说转载 2012-09-18 22:48:46 · 495 阅读 · 0 评论 -
stl_config.h中和编译器相关的一些宏定义
在SGI STL 中的config.h文件中有一些宏定义,这些宏定义可能会让你感到困惑,其实它们的主要作用就是为了区分不同编译器对C++ Standard的支持程度。 1. __STL_STATIC_TEMPLATE_MEMBER_BUG# if __GNUC__ == 2 && __GNUC_MINOR__ # define __STL_STATIC_TEMPL转载 2012-09-18 22:56:36 · 626 阅读 · 0 评论 -
STL源码剖析总结
侯老师说泛型技术学习分三层境界,最高境界自然就是自行扩展STL了,要自行扩展不单要清楚STL的实现及原理还要对STL有深刻理解,以达到能够编写无缝融入STL的自行扩展的组件,嘛,就是写库吧下面就贴上一个自己写的简单的数组容器,当然迭代器为原始指针所以就不需要专门编写迭代器,STL也提供了原始指针的特化版本萃取机,所以并不需要为迭代器编写额外代码(要不然就麻烦了),为了更好理解STL空间配置器也转载 2012-09-18 22:38:38 · 378 阅读 · 0 评论 -
神奇的__type_traits
在STL中为了提供通用的操作而又不损失效率,我们用到了一种特殊的技巧,叫traits编程技巧。具体的来说,traits就是通过定义一些结构体或类,并利用模板类特化和偏特化的能力,给类型赋予一些特性,这些特性根据类型的不同而异。在程序设计中可以使用这些traits来判断一个类型的一些特性,引发C++的函数重载机制,实现同一种操作因类型不同而异的效果。traits的编程技巧极度弥补了C++语言的不足转载 2012-09-18 22:56:04 · 393 阅读 · 0 评论 -
内存配置器alloc
虽然STL的内存配置器在我们的实际应用中几乎不用涉及,但它却在STL的各种容器背后默默做了大量的工作,STL内存配置器为容器分配并管理内存。统一的内存管理使得STL库的可用性、可移植行、以及效率都有了很大的提升,因此STL内存配置器是STL库中最重要的组成部分之一。 1、Constructor和Destroy 我们所习惯的C++内存空间分配动作如下:class Fo转载 2012-09-18 22:55:41 · 455 阅读 · 0 评论 -
配接器(包括仿函数),萃取器、分配器、迭代器
今天重读《STL源码分析》,一目十行,看的很爽,想起当年看这本书,看着脑袋就大。说明这些年,功力还是有所增长的。STL的精髓,总结起来,就四点:配接器(包括仿函数),萃取器、分配器、迭代器。其中分配器和迭代器是常人能想出的产物,萃取器是高手想出的产物,配接器是大师想出的产物。分配器需要记住的是,一般的内存分配器没有启用次级分配能力,只启用了一级分配器,即直接使用malloc和free来转载 2012-09-20 00:10:51 · 2926 阅读 · 0 评论 -
ptrdiff_t 与指针减法 .
对于指向同一数组arr[5]中的两个指针之差的验证:数组如下:ptr = arr;01234ptr[0] ptr[4] 1: #include 2: #include 3: 4: int main(int argc, char *argv[]) 5: { 6: int转载 2012-11-20 09:14:58 · 433 阅读 · 0 评论