STL
文章平均质量分 87
candice廷
做一位出色的算法工程师
展开
-
STL源码解析1—六大组件关系
一. STL六大组件介绍1. 容器STL容器包含两种:序列式容器主要有vector、list、deque,以及关联式容器主要有set、map、multiset、multimap。容器主要是用来存放数据的,从实现的角度来看容器是一种class template(类模板)。2. 算法STL包含算法达上百种,主要有sort、search、copy、er原创 2014-09-22 17:14:03 · 751 阅读 · 0 评论 -
STL源码—list完整源码
protected: //把区间[first,last)的节点数据插入到指定节点position之前,position不能在区间内部 //这个函数是list类的protected属性,不是公共接口,只为list类成员服务 //为下面拼接函数void splice()服务 void transfer(iterator __position, iterato原创 2014-10-11 14:38:59 · 1163 阅读 · 0 评论 -
STL源码—list
在SGI STL中,list容器是一个循环的双向链表,它的内存空间效率较前文介绍的vector容器高。因为vector容器的内存空间是连续存储的,且在分配内存空间时,会分配额外的可用空间;而list容器的内存空间不一定是连续存储,内存之间是采用迭代器或节点指针进行连接,并且在插入或删除数据节点时,就配置或释放一个数据节点,并不会分配额外的内存空间,这两个操作过程都是常数时间。原创 2014-10-11 14:35:56 · 652 阅读 · 0 评论 -
STL源码—list transfer merge reverse
以下对迁移操作transfer()进行分析,该函数不是公共接口,属于list容器的保护成员函数,但是它为拼接函数服务,拼接函数的核心就是迁移函数;transfer()和splice()函数原创 2014-10-11 14:40:03 · 910 阅读 · 0 评论 -
STL源码—heap最大堆,最小堆
最大堆和最小堆都是一棵完全二叉树。 最大堆:是指根节点的关键字值是堆中的最大关键字值,且每个节点若有儿子节点,其关键字值都不小于其儿子节点的关键字值。 最小堆:是指根节点的关键字值是堆中的最小关键字值,且每个节点若有儿子节点,其关键字值都不大于其儿子节点的关键字值。原创 2014-11-17 20:23:26 · 1634 阅读 · 0 评论 -
STL源码—红黑树
红黑树的性质:每个节点或是红色的,或是黑色的。根节点是黑色的。每个叶节点(NULL)是黑色的。如果一个节点是红色的,则它的两个孩子节点都是黑色的。对每个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点。原创 2014-11-17 16:57:52 · 582 阅读 · 0 评论 -
STL源码—二叉树查找树
为了进一步了解RB树,先了解一下二叉查找树原创 2014-11-17 16:29:35 · 3305 阅读 · 0 评论 -
STL源码—红黑树2
红黑树的基本内容已经介绍了,原创 2014-11-17 17:18:59 · 542 阅读 · 0 评论 -
STL源码—stack,queue
stack是一种“先进后出”的数据结构,它只能在栈顶对数据进行操作,即只能在栈顶进行新增元素、移除元素、取得最顶端元素。不能进行遍历行为,所以不需要设计自己的迭代器。在SGI STL的源码的设计中,它是基于某种容器作为底部结构的,默认容器是deque容器,用户也可以自己指定容器的类型。原创 2014-11-17 18:09:09 · 1710 阅读 · 3 评论 -
STL源码—priority_queue
priority_queue 优先级队列是一个拥有权值概念的单向队列queue,在这个队列中,所有元素是按优先级排列的(也可以认为queue是个按进入队列的先后做为优先级的优先级队列——先进入队列的元素优先权要高于后进入队列的元素)。在计算机操作系统中,优先级队列的使用是相当频繁的,进线程调度都会用到。在STL的具体实现中,priority_queue也是以别的容器作为底部结构,再根据堆的处理规则原创 2014-11-19 16:35:23 · 690 阅读 · 4 评论 -
STL源码—deque
deque是一种双向开口的分段连续线性空间,可以在头尾端进行元素的插入和删除。deque与vector最大的差异就是:deque允许于常数时间内对头端进行插入或删除元素;第二是deque是分段连续线性空间,随时可以增加一段新的空间;deque不像vector那样,vector当内存不够时,需重新分配/复制数据/释放原始空间;不过deque的迭代器设置比vector复杂,因为迭代器不能使用普原创 2014-10-15 19:34:40 · 963 阅读 · 0 评论 -
STL源码-iterator traits编程技法(续)
// Filename: type_traits.h// Comment By: 凝霜// E-mail: mdl2009@vip.qq.com// Blog: http://blog.csdn.net/mdl13412/* * * Copyright (c) 1997 * Silicon Graphics Computer Systems, In原创 2014-10-10 11:01:42 · 887 阅读 · 0 评论 -
STL源码解析—vector
vector的数据安排和操作方式类似于C++内置数组类型array,唯一的区别就是在于空间的灵活运用。内置数组array是静态空间,一旦分配了内存空间就不能改变,而vector容器可以根据用户数据的变化而不断调整内存空间的大小。转载 2014-10-10 15:33:50 · 1252 阅读 · 0 评论 -
STL源码分析—空间配置器(续)
空闲块列表节点的结构原创 2014-10-09 14:43:03 · 832 阅读 · 0 评论 -
STL1—顺序容器vector list deque的基本知识
顺序容器:在程序中我们经常原创 2014-09-03 20:31:37 · 621 阅读 · 0 评论 -
STL8—泛型算法结构
正如所有的容器都建立在一致的设计模式上一样,算法也具有共同的设计基础。 算法最基本的性质是需要使用的迭代器种类。所有算法都指定了它的每个迭代器形参可使用的迭代器类型。比如,如果形参必须为随机访问迭代器则可提供vector或 deque类型的迭代器,或者提供指向数组的指针。而其他容器的迭代器不能用在这类算法上。 C++还提供了另外两种算法模式:一种模式由算法所带的形参定义;原创 2014-09-18 14:38:14 · 694 阅读 · 0 评论 -
STL6—泛型算法1
标准库容器定义的操作非常少,并没有给容器添加大量的功能函数,而是选择提供一组算法,这些算法大都不依赖特定的容器类型,是“泛型”的,可作用在不同类型的容器和不同类型的元素上! 所谓泛型算法:一是因为它们实现共同的操作,所以称之为“算法”;而“泛型”指的是它们可以操作在多种容器类型上——不但可作用于vector或list这些标准库类型,还可用在内置数组类型、甚至其他类型的序列上,只要自定原创 2014-09-18 11:22:46 · 689 阅读 · 0 评论 -
STL3—Set容器基础总结
map容器是键-值对的集合,好比人名为键的地址和电话号码。相反的,set容器类型只是单纯的键的集合。当只想知道一个键是否存在时,使用set容器是最合适的。原创 2014-09-12 10:43:07 · 520 阅读 · 0 评论 -
STL7—迭代器
三种迭代器类型: 1)插入迭代器:这类迭代器与容器绑定在一起,实现在容器中插入元素的功能。 2)iostream迭代器:这类迭代器可以与输入与输出流绑定在一起,用于迭代遍历所关联的IO流。 3)反向迭代器:这类迭代器实现向后遍历,而不是向前遍历,所有的容器都定义了自己的reverse_iterator类型,由rbegin和rend成员函数返回。上述原创 2014-09-18 11:46:39 · 673 阅读 · 0 评论 -
STL5—STL综合实例,文本查询
STL--容器的综合应用:文本查询程序原创 2014-09-15 19:36:45 · 792 阅读 · 0 评论 -
STL4—multimap,multiset基础知识总结
multimap和multiset头文件分别为map和aet他们的操作和set和map基本相同,但是有一个区别,m不支持原创 2014-09-12 11:11:13 · 558 阅读 · 0 评论 -
STL2—关联容器map基础总结
map是键-值对的集合。map类型通常可以理解为关联数组:可以通过使用键作为下标来获取一个值,正如内置数组类型一样;而关联的本质在于元素的值与某个特定的键相关联,而并非通过元素在容器中的位置来获取。原创 2014-09-09 20:43:07 · 629 阅读 · 0 评论 -
STL源码分析—空间配置器
两个全局函数 ::operator new 和 ::operator delete ,注意不要把他们和一般的new delete混为一谈,我们的运算符new在分配内存的时候同时调用对象的构造函数初始化内存,而::operator new只是分配内存,并不调用构造函数,这是实现一块无初始化内存池的关键点,同理delete。另外还需要了解placement new运算符,他是定位运算符,并不分原创 2014-10-09 14:16:49 · 677 阅读 · 0 评论 -
STL源码-iterator traits编程技法
typedef typename iterator_traits::value_type value _type; 我们可能对typedef很了解,即定义一个别名,其形式是:typedef+原类型名+新类型名;因此,我们可以知道typename iterator_traits::value_type是类型名;但是感到困惑的是这里为什么要使用typename关键字?原创 2014-10-09 16:42:20 · 801 阅读 · 0 评论 -
effective stl(容器部分总结)
还是很喜欢effective部分的书,看了好几遍,这里把stl中和容器相关的一些基本的注意的点进行介绍总结,之后对迭代器等进行总结1 对序列容器中需要逐个删除的时候,不能像关联容器那样事先对迭代器进行++操作,因为删除一个迭代器,会使他自己无效,后面的迭代器也无效,所以应该保存删除erase返回的下一个指针的值。而关联容器中并不会导致后面的迭代器无效的情况2 在stl中如果对容器内对象原创 2015-08-01 17:21:34 · 1044 阅读 · 0 评论