自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

handsomeKyne

披一身上善若水,走一生厚德载物

  • 博客(16)
  • 收藏
  • 关注

原创 STL关联式容器之散列表——hashtable

以散列表为基础的关联式容器深受人们的喜欢,虽然它们目前还不是STL的标准,但是SGI的STL已经包含了这些内容。前面学习的关联式容器都是基于红黑树这样一种二叉搜索树,也正因为这样,如果要求搜索时间具有对数平均时间,那么需要数据有足够的随机性。而哈希表这种数据结构,在插入、删除、搜索等操作也具有“常数平均时间”的表现,而这种表现是以统计为基础的,不需要依赖数据输入的随机性。

2016-07-13 15:58:01 815

原创 STL关联式容器之映射表——map

1、map的特性和set一样,map的元素都会自动根据键值进行自动排列,map的所有元素都是pair类型,同时拥有实值和键值,pair的第一个元素为键值,第二个元素为实值,且map不允许两个键值相同的元素。在学习map之前,我们先学习一下pair。templatestruct pair{  typedef T1 first_type;  typedef T2 secon

2016-07-13 09:50:10 628

原创 STL关联式容器之集合set

这一节,我们将学习STL关联式容器集合——set。1、set的特性所有元素都会根据元素的键值自动排列,set的键值就是实值,并且set不允许两个元素相同的键值。2、我们可以通过set的迭代器改变set的元素值吗?答案是不行,因为set的元素值就是键值,因此这关系到排列规则,如果我们擅自修改元素值,会破坏set内部的排列规则。也正因为这样,STL的set的迭代器是const_iter

2016-07-13 09:28:40 515

原创 STL关联式容器之红黑树

这一节我们来学习红黑树,如果你能够自己实现一个红黑树,那么对它的理解将会更加深刻。1、树的总览根节点到任何节点之间有一条唯一路径。路径长度:指路径所经过的边数。节点的深度:根节点至该节点的路径长度。根节点的深度为0。节点的高度:该节点到其最深叶节点的高度。根节点的高度最大。注意高度和深度的区别。可以这么理解,高度是向上变大的,而深度是向下变大的。节点大小:该节点所有子代

2016-07-12 16:48:44 1437

原创 STL关联式容器之总览

在上一个系列中,我们学习了STL序列式容器,如vector,list,deque以及某些配接器如stack,queue等。前面我们提过,STL有两种容器,一种即STL序列式容器,另一种即我们即将学习的关联式容器。标准的STL关联式容器有集合(set)和映射表(map),并且还有他们的衍生物——multiset(多键集合)和multimap(多键映射表)。这些容器的底层结构均是红黑树rb-tre

2016-07-12 15:48:08 409

原创 STL序列式容器之优先队列——priority_queue

优先队列有一个有权值的队列,由于是一个队列,所以只支持在尾部插入元素,在头部弹出元素,弹出元素的权值最大。由于含有权值,所以优先队列中的元素并未按照被推入的次序进行排序,而是自动按照元素的权值进行排序,权值最高的排在最前面。因此,这就用到我们上一篇博文中学到的堆,STL缺省情况下,是用一个最大堆完成的。由于优先队列只有权值最高的元素才有可能被外界利用,因此优先队列不提供迭代器。由于优先队列

2016-07-12 10:55:02 839

原创 STL序列式容器之heap(注heap并不归属于stl组件)

在学习优先队列之前,我们有必要学习一下堆,heap。注:heap并不归属于STL组件,它是幕后英雄,扮演则有限队列priority_queue的助手。我们知道优先队列可以将元素以任意次序压入队列中,但是弹出队列元素时,总是弹出优先级最高的元素。最大堆就满足这样的性质。

2016-07-12 10:11:23 596

原创 STL序列式容器之队列——queue

上一节我们学习的stack是后入先出,这一节学的队列queue遵循先入先出的规则。同stack一样,queue的压入和弹出元素操作为push和pop操作。学习queue可以和stack进行对照,两者基本的框架和思路都是一样的。比如1、queue也没有迭代器。2、queue缺省情况下也是以双端队列deque为底层结构。3、queue也可以以list为底层结构,如#incl

2016-07-11 23:02:12 572

原创 STL序列式容器之堆栈——stack

stack其实是一个配接器(adapter),因为SGI的STL缺省情况下是以deque作为底层结构的,即修改某物接口,形成另一种数据结构。到目前为止,我们总结一下学过的容器的压入和弹出操作。vector:只能在尾端操作,push_back, pop_back;list:由于stl中的list是一个双向环状链表,可以在头部和尾部进入操作,push_front,push_back,pop

2016-07-11 22:56:00 537

原创 STL序列式容器之双端队列——deque

前面我们学习过序列容器vector,vector是占用一段连续内存空间,并且是单向开口的,只能在尾部进行压入或者弹出元素(其实从技术上讲,vector也可以实现在头部实现插入和删除操作,但是效率非常低,因此SGI的STL并不支持在头部操作元素)。现在我们要学习的双端队列也是占用一段连续内存空间(实际上是逻辑连续,实际内存不一定连续),但是是双向开口的。1、deque和vector的最大差异

2016-07-11 22:41:55 658

原创 STL序列式容器之list(双向链表)

和vector相比,list的实现更加复杂,因为它并不要求空间是连续存储的,它的好处是已知位置的元素插入和移除都是常数时间。1、list的节点由于list是双向链表,因此list的节点需要指向前驱节点的指针以及指向后继节点的指针。2、list的迭代器由于空间并不连续,因此list无法支持随机访问元素的能力,所以list使用的迭代器是双边迭代器,bidirectional itera

2016-07-10 23:53:01 627

原创 STL序列式容器之vector

首先我们需要对STL的容器有一个宏观的概念,然后在仔细讨论vector。STL容器分为两类:分别是序列式容器和关联式容器。序列式容器:vector, heap, priority_queue, list, slist, deque, stack, queue.需要说明的是,heap内含一个vector,priority_queue内含一个heap,stack内含一个deque,qu

2016-07-10 23:14:38 448

转载 STL源码解析——traits(特性)编程技巧

侯捷老师在《STL源码剖析》中说到:了解traits编程技术,就像获得“芝麻开门”的口诀一样,从此得以一窥STL源码的奥秘。如此一说,其重要性就不言而喻了。       之前已经介绍过迭代器,知道了不同的数据结构都有自己专属的迭代器,不同的迭代器也有不同的特性,由于算法的接口是统一的,通过迭代器的不同属性,算法自动选择正确的执行流程,在完全任务的同时,也尽可能提高算法的执行效率。那算法如何获知

2016-07-10 21:59:49 488

原创 STL空间配置器

本文是对STL源码解析第二章的学习总结,不足之处,欢迎批评指出。1、SGI标准的空间配置器,std::allocator虽然SGI也定义了一个部分标准的,名为allocator的配置器,但SGI自己从未使用过,主要原因是效率不佳。它只是将c++的operator new和operator delete做一层薄薄的封装而已。注意operator new只负责内存分配,而new还要复制构造。实

2016-07-10 21:42:20 268

原创 c风格的字符串

今天要实现一个自己的反转函数,反转char*字符串,发现对char写入时一直提示访问出错。重新学了一下c风格的字符串,总结一下c风格的字符串,以及出现这个问题的原因。重要:1、字符串字面值的类型是const char类型的数组,因此是不可以直接改变的。2、字符串字面值是以null为结束的字符数组。3、永远不要忘记char*是以null为结束的,因此分配内存大小时要多加1.因此这

2016-07-09 09:56:47 279

原创 cracking the code interview——c++实现

本系列是我对cracking the code interviews的c++实现和学习,不足之处欢迎批评指正。题目:实现一个算法,判断其中的字符是否都不相同。如果不能用数据结构,又该如何实现?解:首先得向面试官问清楚是Unicode还是ASCII编码,这里我们假设为ASCII编码。具体代码实现如下:#include#includeusing namespace std;

2016-07-09 09:03:53 848

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除