![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
STL 源码分析
文章平均质量分 79
L_J_SHOU
从蛛丝马迹中寻找结果
展开
-
STL源码分析----神奇的 list 的 sort 算法实现
STL中有一个std::sort算法,但它是不支持std::list的,因为list不提供RandomIterator的支持,但list自己提供了sort算法,把list的元素按从小到大的方式来排序,代码长度到不长,但真是难以读懂,后来扣持了一下午终于搞明白了,贴个总结上来。list::sort的代码如下(sgi stl):[cpp] view plai转载 2014-02-19 20:23:24 · 2799 阅读 · 1 评论 -
动手实现自己的 STL 容器 《1》---- vector
本文参考了侯捷的 《STL 源码分析》一书,出于兴趣,自行实现了简单的 vector 容器。之后会陆续上传 list, deque 等容器的代码,若有错误,欢迎留言指出。vector 容易实现的几点注意事项:1. 由于vector 是动态数组。出于效率的考虑,在往vector 中加入元素时,内存的扩展遵循的规则是: 1> 如果当前可用内存不够,开 2倍大的内存,将原原创 2014-04-11 15:58:11 · 3172 阅读 · 0 评论 -
STL 源码分析《1》---- list 归并排序的 迭代版本, 神奇的 STL list sort
SGI STL 的源代码(选自 STL 源码分析)如下:// list 不能使用 STL 算法 sort ()// 因为 STL 算法 sort() 只接受 RandomAccessIterator// 本函数采用 mergesorttemplate void list::sort () { // 以下判断,如果是空链表, 或仅有一个元素,就不进行任何操作 if (原创 2014-02-20 19:38:16 · 2357 阅读 · 0 评论 -
STL 源码分析《2》----nth_element() 使用与源码分析
Select 问题: 在一个无序的数组中 找到第 n 大的元素。本文介绍 STL 算法库中 nth_elemnt 的实现代码。一、使用说明void nth_element (RandomAccessIteratorbeg, RandomAccessIterator nth,原创 2014-02-23 17:22:02 · 3205 阅读 · 0 评论 -
STL源码分析《3》----辅助空间不足时,如何进行归并排序
归并排序最核心的算法就是 将两个已经排序的数组在 O(N)时间内合并成一个有序数组。但是合并的过程中一般需要 m + n 的额外辅助空间。其中, m 、 n 是两个已经排序数组的长度。现在假如, 1〉 辅助空间 bufSize 2〉 bufSize 3〉假如没有辅助内存呢??STL implace_merge 函数在其实现中分别考虑了上述三种情况,并且尽可能原创 2014-03-07 21:40:12 · 2319 阅读 · 2 评论 -
STL源码分析《4》----Traits技术
STL原创 2014-03-08 18:20:52 · 2000 阅读 · 2 评论 -
STL 源码分析《5》---- lower_bound and upper_bound 详解
在 STL 库中,关于二分搜索实现了4个函数。bool binary_search (ForwardIterator beg, ForwardIterator end, const T& value)判断 [beg, end) 中是否存在 value 的值。ForwardIteratorlower_bound (ForwardIterator beg, ForwardIte原创 2014-03-23 16:18:11 · 2426 阅读 · 1 评论 -
动手实现自己的 STL 容器《2》---- list
1. 序: 本文参考了侯捷的 《STL 源码分析》一书,出于兴趣,自行实现了简单的 list 容器。 学习了 STL 的 list 容器的源代码,确实能够提高写链表代码的能力。其中的 sort 函数,可谓是非常神奇。。。2. 实现的细节 STL 的 list 容器采用了一个带有尾节点的环状双向链表。 如下图所示:// Last Update:2014原创 2014-04-20 21:47:53 · 1266 阅读 · 0 评论