本文senlie原版的,转载请保留此地址:http://blog.csdn.net/zhengsenlie pre_permutation ---------------------------------------------------------------- 描写叙述: 取得 [first, last) 所标示之序列的前一个排列组合. 假设没有,返回 false,有,返回true 思路: 从后往前 1.找两个相邻元素,令左端的元素为*i,右端的元素为*ii,且满足 *i > *ii 2…
本文senlie原,转载请保留此地址:http://blog.csdn.net/zhengsenlie includes(应用于有序区间) ------------------------------------------------------------- 描写叙述:S1和S2都必须是有序集合.推断序列二 S2 是否"涵盖于"序列一 S1,即"S2的每个元素是否都出现于 S1中" 思路: 1.遍历两个区间.直到当中一个走完 2.假设序列二的元素小于序列一的元素…
本文senlie原版的,转载请保留此地址:http://blog.csdn.net/zhengsenlie merge (应用于有序区间) -------------------------------------------------------------------------- 描写叙述:将两个经过排序的集合S1和S2.合并起来置于还有一段空间.所得结果也是一个有序(sorted)序列 思路: 1.遍历两个序列直到当中一个结束了 2.假设序列一的元素较小.将它放到结果序列中,并前进 1…
本文为senlie原创.转载请保留此地址:http://blog.csdn.net/zhengsenlie binary_search ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 描…
本文senlie原版的.转载请保留此地址:http://blog.csdn.net/zhengsenlie heap ------------------------------------------------------------------------- binary heap 是一种全然二叉树. 隐式表示法:以 array 表述 tree. 小技巧:将 array 的 #0 元素保留.则第 i 个元素的左右子节点各自是 2i 和 2i + 1, 父节点是i/2 --> STL 里没有…
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie search ------------------------------------------------------------------------- 描写叙述:在序列一[first1, last1) 所涵盖的区间中.查找序列二[first2, last2) 的首次出现点. 思路: 1.遍历序列二 2.假设两序列的当前元素一样,都前进 1 3.否则序列二的迭代器又一次指向開始元素…
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie partial_sort / partial_sort_copy ----------------------------------------------------------------------------------------------------------------------------------------- 描写叙述:本算法接受一个 middle 迭代器(位…
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie lower_bound(应用于有序区间) -------------------------------------------------------------------------------------------------------------------------- 描写叙述:二分查找,返回一个迭代器指向每个"不小于 value "的元素, 或 value 应…
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie random_shuffle -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 描写叙述:将[fir…
本文为senlie原创.转载请保留此地址:http://blog.csdn.net/zhengsenlie merge sort ---------------------------------------------------------------------- 描写叙述:归并排序 思路: 1.将区间对半切割 2.对左.右段分别排序 3.利用inplace_merge将左.右段合并成为一个完整的有序序列 复杂度:O(nlog n) 源代码: template<class Bidirect…
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie partition ------------------------------------------------------------------------ 描写叙述:partition 会将区间[first,last) 中的元素又一次排列.全部被一元条件运算 pred 判定为 true 的元素,都会被放在区间的前段, 被判定为 false 的元素,都会被放在区间的后段. part…
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie equal_range(应用于有序区间) -------------------------------------------------------------------------------------------------------------------------------------- 描写叙述:利用二分查找找到一个区间,区间里的全部值都等于给定值,返回的是一个pa…
本文为senlie原创.转载请保留此地址:http://blog.csdn.net/zhengsenlie inplace_merge(应用于有序区间) -------------------------------------------------------------------- 描写叙述:假设两个连接在一起的序列[first, middle)和 [middle, last]都已排序, 那么 inplace_merge 可将它们结合成单一一个序列,并仍有序. 源代码: template…
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie next_permutation ----------------------------------------------------------------------- 描写叙述: 取得 [first, last) 所标示之序列的下一个排列组合.假设没有,返回 false,有,返回true 思路: 从后往前 1.找两个相邻元素,令左端的元素为*i,右端的元素为*ii,且满足 *i…
本文为senlie原创.转载请保留此地址:http://blog.csdn.net/zhengsenlie nth_element ------------------------------------------------------------------------------ 描写叙述:又一次排序,使得[nth,last)内没有不论什么一个元素小于[first,nth)内的元素, 但对于[first,nth)和[nth,last)两个子区间内的元素次序则无不论什么保证. 思路: 1.…
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie search_n ---------------------------------------------------------------------------------------- 描写叙述:在序列[first, last) 所涵盖的区间中,查找"连续 count 个符合条件之元素"所形成的子序列. 并返回迭代器 last 思路: 1.首先找出 value 第一次出…
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie rotate -------------------------------------------------------------- 描写叙述:将[first, middle) 内的元素和[middle, last) 内的元素互换. /*------------------------------------------------------------ *分派函数(dispatc…
STL在列表list它是一种经常使用的容器.list不连续双向链表在内存,而且是环形. 理解列表如何操作的详细信息,然后.阅读STL名单上的代码是最好的方法. G++ 2.91.57.cygnus\cygwin-b20\include\g++\stl_list.h 完整列表 /* * * Copyright (c) 1994 * Hewlett-Packard Company * * Permission to use, copy, modify, distribute and sell thi…
本文senlie原版的,转载请保留此地址:http://blog.csdn.net/zhengsenlie set ------------------------------------------------------------------------ 全部元素都会依据元素的键值自己主动被排序. 不能够通过 set 的迭代器改变 set 的元素值.由于 set 元素值就是其键值.关系到 set 元素的排列规则. set<T>::iterator 被定义为底层 RB-tree 的 con…
Heap堆的数据结构是经常使用,Heap它还能够存储元件的.但STL并且不提供Heap集装箱.仅仅提供信息Heap算术运算.只支持RandomAccessIterator该容器可以被用作Heap集装箱. Heapmax heap和min heap.max heap中每次取出的结点时heap结构中值最大的结点,min heap中每次取出的结点时heap结构中值最小的结点. 在实际应用中.常常常使用vector作为heap容器,heap常常作为priority queue.对于二叉堆.这里有描写叙述…
Stack堆栈是频繁使用FILO数据结构,FILO指first in last out,最后出来. 因为只有一个堆叠端口,这也是在口腔进入口. 可以在堆栈中只能操作,你不能访问其它元件的堆叠.器. Stack的实现是依赖其它容器的.用deque做底层数据结构.这种实现.在STL中往往不称做container容器,往往被归类为container adapter容器适配器.deque是双向开口的数据结构,功能远强大于栈,仅仅需简单分装就可以做成栈. 用其它容器做底层数据结构也但是实现栈,vector…
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie copy //唯一对外接口 /*-------------------------------------------------------------------------------------- * copy 函数及其重载形式 */ //全然泛化版本号. template<class InputIterator, class OutputIterator> // ? 这里的 I…
前言 因为在前文的<STL算法剖析>中,源代码剖析许多,不方便学习,也不方便以后复习.这里把这些算法进行归类,对他们单独的源代码剖析进行解说.本文介绍的STL算法中的sort排序算法,SGI STL中的排序算法不是简单的高速排序,而是交叉利用各种排序:堆排序.插入排序和高速排序:这样做的目的是提高效率.针对数据量比較大的採用高速排序,数据量比較小的能够採用堆排序或插入排序. 本文介绍了有关排序的算法random_shuffle.partition.stable_partition.sort.s…
前言 因为在前文的<STL算法剖析>中,源代码剖析许多.不方便学习,也不方便以后复习,这里把这些算法进行归类.对他们单独的源代码剖析进行解说.本文介绍的STL算法中的remove删除算法.源代码中介绍了函数remove.remove_copy.remove_if.remove_copy_if.unique.unique_copy. 并对这些函数的源代码进行具体的剖析.并适当给出使用样例,具体详见以下源代码剖析. remove移除算法源代码剖析 // remove, remove_if, rem…
前言 因为在前文的<STL算法剖析>中.源代码剖析许多.不方便学习.也不方便以后复习,这里把这些算法进行归类.对他们单独的源代码剖析进行解说.本文介绍的STL算法中的merge合并算法. 源代码中介绍了函数merge.inplace_merge.并对这些函数的源代码进行具体的剖析,并适当给出使用样例,具体详见以下源代码剖析. merge合并算法源代码剖析 // merge, with and without an explicitly supplied comparison function.…
看完,<STL源代码剖析>---stl_deque.h阅读笔记(1)后.再看代码: G++ 2.91.57,cygnus\cygwin-b20\include\g++\stl_deque.h 完整列表 /* * * Copyright (c) 1994 * Hewlett-Packard Company * * Permission to use, copy, modify, distribute and sell this software * and its documentation f…
前言 在前面的博文中剖析了STL的数值算法.基本算法和set集合算法.本文剖析STL其它的算法,比如排序算法.合并算法.查找算法等等.在剖析的时候.会针对函数给出一些样例说明函数的使用.源代码出自SGI STL中的<stl_algo.h>文件.注:本文的源代码许多,可能兴许博文会对这些算法进行归类分析. STL算法剖析 #ifndef __SGI_STL_INTERNAL_ALGO_H #define __SGI_STL_INTERNAL_ALGO_H #include <stl_hea…
本文为senlie原创.转载请保留此地址:http://blog.csdn.net/zhengsenlie list ---------------------------------------------------------------------- ??为什么非常多在算法库里有的算法还要在类的成员函数里又一次实现一遍? -->1.由于算法库里的是通用的.对于详细的类来说效率不高. 比方说 reverse 假设直接用 stl_algo.h 里的 reverse,会再调用 iter_swa…
1.为什么要出现? 依照默认认定.一个模板给出了一个单一的定义,能够用于用户能够想到的不论什么模板參数!可是对于写模板的人而言,这样的方式并不灵活.特别是遇到模板參数为指针时,若想实现与类型的參量不一样的实例化.就变得不太可能了!也有时.想禁止此种同样的实例化变得不太可能! 故而出现了,Partial Specialization! 同一时候,在使用void*指针时.能够最大限度的共享代码,降低代码的膨胀! 2.它是什么?事实上,就是用户定义的偏特化.用template<>来说明这是一个偏特化…
本文为senlie原创.转载请保留此地址:http://blog.csdn.net/zhengsenlie hashtable --------------------------------------------------------------------------- 二叉搜索树具有对数平均时间的表现,它建立在输入数据有足够的随机性的如果 hashtable 有常数平均时间的表现,基于统计,不需依赖输入元素的随机性 hashtalbe 的简单实现: 所有元素都 16-bits 不带正负…