
STL
文章平均质量分 81
骑猪去兜风..
无
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
stl中list的sort()函数解析
list不能使用STL算法sort(),必须使用自己的sort()member function,因为STL算法sort()只接受RandomAccessIterator 算法描述: template void list::sort() { sort(WKstl::less()); } template template void list::sort(Compare c原创 2018-04-08 15:35:00 · 1041 阅读 · 0 评论 -
哈希表
目录 哈希表(散列表) 1.哈希表定义 2.哈希表的关键 3.最常见的哈希函数(散列函数)构造方法 直接定址法 除留余数法 数字分析法 平方取中法 3.哈希冲突的解决方法 开放定址法 链地址法 4.哈希表的优缺点 5.STL中哈希表的奇特设计 6.Hash的应用 7.Hash和红黑树的选择 哈希表(散列表) 1.哈希表定义 哈...原创 2019-01-21 16:59:24 · 791 阅读 · 0 评论 -
string涉及的一些转换
string、char *、char[]之间的互相转换 一、string转换为char * 标准库的string类提供了3个成员函数来从一个string得到c类型的字符数组:c_str()、data()、copy(p,n)。 1. c_str() 生成一个const char*指针,指向以空字符终止的数组。 这个数组的数据是临时的,当有一个改变这些数据的成员函数被调用后,其中的数据就会失...原创 2018-12-06 10:18:40 · 252 阅读 · 1 评论 -
STL总结
容器 容器的定义 在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器。很简单,容器就是保存其它对象的对象,当然这是一个朴素的理解,这种“对象”还包含了一系列处理“其它对象”的方法。 容器的种类 1、顺序容器:是一种各元素之间有顺序关系的线性表,是一种线性结构的可序群集。顺序性容器中的每个元素均有固定的位置,除非用删除或插入的操作改变这个位置。顺...原创 2018-11-04 21:46:18 · 344 阅读 · 1 评论 -
hashtable源码解读
hashtable概述 Hash_table可提供对任何有名项(named item)的存取、删除和查询操作。由于操作对象是有名项,所以hash_table可被视为是一种字典结构(dictionary)。 Hash_table使用名为hash faction的散列函数来定义有名项与存储地址之间的映射关系。使用hash faction会带来一个问题:不同的有名项可能被映射到相同的地址,这便是所谓...原创 2018-11-04 20:25:31 · 280 阅读 · 0 评论 -
deque源码解读
deque概述 vector是单向开口的连续线性空间,deque则是一种双向开口的连续线性空间。所谓双向开口,意思是可以在头尾两端分别做元素的安插和删除动作。vector当然也可以在头尾两端做动作,但是其头部动作效率奇差,无法被接受。 deque和vector的最大差异,一在于deque允许在常数时间内对头尾端进行元素的安插或移除动作。二在于deque没有所有容量概念,因为它是动态地以分段连...原创 2018-11-04 15:01:19 · 1137 阅读 · 0 评论 -
RB-tree源码
红黑树 红黑树的四个性质: (1)每个节点要么红要么黑。 (2)根节点黑色。 (3)每个叶子节点是黑色。【叶子节点指的是NIL或者NULL的叶子节点】。 (4)如果一个节点是红色的,那么它的叶子节点必须是黑色的。 (5)任一节点至NULL(树尾端)的任何路径,所包含的黑节点数必须相同。 这些性质强制了红黑树的关键性质: 从根到叶子的最长的可能路径不多于最短的可能路径的两倍长。主要原因...原创 2018-11-03 17:49:45 · 413 阅读 · 0 评论 -
SGI STL Sort算法
Sort stl所提供的各式各样的算法中,sort()是最复杂庞大的一个。这个算法接受两个随机存取迭代器,然后将区间内的所有元素以渐增方式由小到大重新排列。还有个版本则允许用户指定一个仿函数,作为排序标准。 stl中的所有关系型容器都拥有自动排序功能,所以不需要sort算法。序列式容器中的stack,deque和priority_queue都有特别的入口,不允许用户对元素排序。剩下的vecto...原创 2018-10-30 21:28:16 · 296 阅读 · 0 评论 -
list总结
list的节点 list本身和list的节点是不同的结构,下面是list的节点结构 template <class T> struct __list_node { typedef void* void_pointer; void_pointer next; void_pointer prev; T data; }; 显然这是一个双向链表 list的迭代器 l...原创 2018-10-30 14:11:56 · 271 阅读 · 0 评论 -
仿函数和配接器
先说一下STL提供的六大组件,彼此之间可以组合套用 1、容器(Containers):各种数据结构,如:vector、list、deque、set、map。用来存放数据。从实现的角度来看,STL容器是一种class template。 2、算法(algorithms):各种常用算法,如:sort、search、copy、erase。从实现的角度来看,STL算法是一种 function temp...原创 2018-07-22 20:16:25 · 478 阅读 · 0 评论 -
stl中的ptr_fun的实现
ptr_fun是一个配接器,这个配接器能够将一般函数当作仿函数使用,使得能够将一般函数当做仿函数传给STL算法。 应用举例 在https://blog.youkuaiyun.com/wk_bjut_edu_cn/article/details/80004279这篇文章中是直接运用仿函数的方法,下面是将一般函数当作仿函数来使用 int LESS(int arg1, int arg2) { if ...原创 2018-04-19 18:32:09 · 954 阅读 · 0 评论 -
compose1、compose2是什么
compose1和compose2均是用于参数合成 比如: f(x)=3*x,g(y)=y+2,那么compose1(f(x),g(y))=(y+2)*3 g1(x)=3*x,g2(x)=2*x,h(x)=a+b,那么compose2(h(x),g1(x),g2(x))=3*x+2*x 大体效果就是上面这样,但我没有实现,因为这两个配接器并未纳入STL标准,是SGI STL的私产品。STL原创 2018-04-19 16:13:29 · 1553 阅读 · 0 评论 -
bind1st、bind2nd源码分析
概述 bind1st 和 bind2nd 函数把一个二元函数对象绑定成为一个一元函数对象。但是由于原来的二元函数对象接受两个参数,在绑定成为一元函数对象时需要将原来两个参数中的一个绑定下来,也就是通过绑定二元函数对象的一个参数使之成为一元函数对象的参数。bind1st是绑定第一个参数,bind2nd则是绑定第二个参数。 这也就是说,bind1st 和 bind2nd 函数把less<in...原创 2018-04-19 15:19:57 · 696 阅读 · 0 评论 -
ostream_iterator,istream_iterator
配接器的概念: 配接器(adapters)在STL组件的灵活组合运用功能上,扮演着轴承、转换器的角色。Adapter事实上是一种设计模式。在设计模式中的定义是:将一个class的接口转换为另一个class的接口,使原本接口不兼容而不能合作的classes,可以一起运作。 STL提供了许多应用于迭代器身上的配接器, IOStream Iterator 所谓iostream iterators原创 2018-04-19 09:54:53 · 688 阅读 · 0 评论 -
堆的实现代码详解
heap概述 严格意义来说,heap不属于stl容器组件,它是priority queue的助手。这里要讲解的heap是binary heap,其实就是一种完全二叉树。 我们以vector对tree进行表述,这种方法称为隐式表述法。 push_heap算法 template<class RandomAccessIterator> inline void push_heap(R...原创 2018-04-13 09:55:10 · 1707 阅读 · 1 评论 -
关于stl中list的reverse操作详解
reverse()用于反转容器中的元素 template void list::reverse() { if (empty() || head.p->next = tail.p) return; auto curNode = head.p; head.p = tail.p->next; head.p->prev = nullptr; do { auto原创 2018-04-06 16:24:47 · 4085 阅读 · 1 评论