摘要:
阅读__adjust_heap源码前,我对于这个函数的一些最初实现想法:1、相关描述: **** Heap的底层实现是Vector类型 ****Heap里面存放的元素是从索引0开始存放,所以如果父结点为i,则其左子节点为(2 * i + 1)而右子节点为 (2 * i + 2) ****调用__adjust_heap函数的前提是:调用__adjust_heap之前 , 先对heap的最前端数据和最尾部数据进行交换2、the __adjust_heap interface **** template< class RandomAccessIterator, class Distance, 阅读全文
摘要:
在list容器中,由于容器自身组织数据的特殊性,所以list提供了自己的排序函数list::sort, 并且实现得相当巧妙,不过《STL源码剖析》的原文中,我有些许疑问,对于该排序算法,侯认为是采用了快排,但是经过仔细分析,我认为是采用了归并来实现的。list::sort函数的实现位于stl_list.h文件,源码及注释如下:template <class T, class Alloc> void list<T, Alloc>::sort() { if (node->next == node || link_type(node->next)->next 阅读全文
摘要:
在SGI源码中,关于空间的destroy功能,分别实现了两个版本,其中一个是接受一个指针的版本,源码位于stl_construct.h中,接口及实现如下:template< class T > inline void destroy( T* pointer ) { pointer->~T( ); }另一个版本接受两个可双向移动的迭代器类型的参数,接口及实现如下:template< class ForwardIterator >inline void destroy( ForwardIterator first, ForwardIterator last ) { _ 阅读全文
摘要:
有关编译器组态设置,由于自己在阅读这一块代码时,老是有许多纠结,所以为了让自己记住一个关键点:有关编译器的组态设置,并非完全精确地针对某些特定编译器,具体移植时, 是需要做适当修改的。特此记录个人想法及思索过程。比如对于:#if defined( __sgi ) && !defined( __GNUC__ ) #if !defined( _BOOL ) define __STL_NEED_BOOL #endif #if !defined( _TYPENAME_IS_KEYWORD ) define __STL_NEED_TYPENAME #endif #ifdef _PARTI 阅读全文