![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
STL源码
文章平均质量分 81
柳下乱
行者,永无疆
展开
-
Traits编程技法之type_trait
STL对于性能的要求非常的严格,任何一点无意义的操作都会严重影响其中容器或算法的性能,即使只是一条语句。在高频率的使用下,这种浪费将会无限扩大。type_traits的作用之一就是提高性能。当我们在进行对象的析构(destroy)操作时,如果对象为内置对象(如int,char,float,pointer)或其数据成员包含内置对象,因为其析构操作由编译器内置执行,所以我们对其进行析构函数的调用是原创 2016-12-03 19:08:19 · 2267 阅读 · 1 评论 -
STL空间配置策略之第一级配置器__malloc_alloc_template
SGI STL中并没有使用传统的allocator作为空间配置工具,虽然allocator符合STL对于空间配置器的基本要求,但是allocator实质上只是对C++内置的::operator new和::operator delete做了一层包装: template inline T * allocate(ptrdiff_t size, T *) { set_new_handler(原创 2016-12-04 18:57:12 · 1463 阅读 · 0 评论 -
Traits编程技法之iterator_traits
在设计容器时,避免不了的就是设计与之契合的迭代器。迭代器,行为类似指针,担任访问元素、提领元素的重任。为什么说是重任呢?因为访问、提领虽是简单易实现的操作,但也是使用频率最高的两个操作。使用频率高,即意味着任何对性能有着极大的影响,所以我们要对迭代器的类别进行细致的划分,力求将每一种迭代器的性能都发挥到极限。(例如vector的迭代器为原生指针,原生指针可以实现随机存取(Random Acce原创 2016-12-06 18:52:06 · 350 阅读 · 0 评论 -
STL容器解析之Vector
vector容器可以说是STL最基本的容器,其实现也可以说是最简单的,但是vector同时也是使用频率最高的STL容器。其实现的动态数组的效果可以广泛的应用在各个层面。对于传统的数组(array),我们常常不得不因为无法知晓在运行期确定的元素个数而为其配置一个大块头,造成了严重的内存浪费。vector相比于传统数组的改进之处在于vector的空间可以自行扩展,且这种可以自行随着元素的加入,在内原创 2016-12-08 18:48:29 · 389 阅读 · 0 评论 -
STL容器解析之List
List容器是STL最基础也是最常用的两大容器之一。相比于vector来说,List在设计上与其有巨大差异,首先是内部结构,List在其内部维护一个环形链表的头节点(在概念上并不属于链表中的一节);其次是迭代器设计,List的迭代器实现在链表中的移动操作,也就是递增时上一个节点、递减时指向下一个节点,而不是单纯的指针值(地址)的加减;还有List以链表节点存储元素的单元,而不是数组,这也导致了List原创 2016-12-11 18:18:33 · 260 阅读 · 0 评论