
例说数据结构与STL
本专栏会用最实际的例子来描述常用的数据结构,并且结合介绍标准模板库STL各个容器来理解它们的特色与优势,从而大大提高我们程序开发的效率。
无鞋童鞋
有远大抱负的人不可忽略眼前的工作
展开
-
例说数据结构&STL(十三)——pair
1 pair类型概述 pair的功能就像它的名字一样,pair将一对值组合成一个值,这一对值可以具有不同的数据类型,两个值可以分别用pair的两个公有函数first和second访问。 1.1 pair类型概述 pair类所在的头文件与命名函数是:#include <utility> 1.2 pair对象基本定义 pair是一种模板类型,其中包含两个数据值,两个数据的类型可以不原创 2017-08-19 22:06:39 · 2130 阅读 · 0 评论 -
例说数据结构&STL(十二)——iterator
1 白话迭代器(iterator) 前面其实每个容器介绍的时候都基本解除过迭代器,但是迭代器的使用细节以及不同容器使用条件我觉得还是很有必要好好总结一下,这也就是本文的重点。迭代器在STL中用来将算法和容器联系起来,起着一种胶着剂的作用。 首先我们还是简单回顾下迭代器是什么,迭代器是一种检查容器内元素并遍历元素的数据类型。它是一种行为类似指针的对象,它提供类似指针的功能,对容器的内容进行原创 2017-07-30 22:11:55 · 1135 阅读 · 0 评论 -
例说数据结构&STL(十一)——hash_map/unordered_map
1 白话hash_map/unordered_map 本篇博文,我们来了解另外两个基于key-value的新结构hash_map和unorderd_map。两者都属于基于哈希表(hash table)构建的数据结构,都是存储的key-value的值,可以通过key快速索引到value。它们存储时是根据key的hash值判断元素是否相同,即unordered_map内部元素是无序的,而map中原创 2017-07-30 21:44:52 · 1769 阅读 · 0 评论 -
例说数据结构&STL(十)——hash_set/unordered_set
1 白话hash_set/unordered_set 这一章节,我们来了解两个新的结构体hash_set和unorderd_set。我将这两者放在一个博文中介绍是因为它们都属于基于哈希表(hash table)构建的数据结构,并且是关键字与键值相等的关联容器。后面我们还会介绍到hash_map与unordered_map两种数据结构,这就好比是set与map的区别了,后面我们再说。原创 2017-07-30 18:14:28 · 4408 阅读 · 0 评论 -
例说数据结构&STL(九)——map
map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力。由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map是内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数原创 2017-07-30 14:01:40 · 854 阅读 · 0 评论 -
例说数据结构&STL(八)——set
set集合容器:实现了红黑树的平衡二叉检索树的数据结构,插入元素时,它会自动调整二叉树的排列,把元素放到适当的位置,以保证每个子树根节点键值大于左子树所有节点的键值,小于右子树所有节点的键值;另外,还得保证根节点左子树的高度与右子树高度相等。 平衡二叉检索树使用中序遍历算法,检索效率高于vector、deque和list等容器,另外使用中序遍历可将键值按照从小到大遍历出来。 构造set集合主要原创 2017-07-30 10:59:52 · 923 阅读 · 0 评论 -
例说数据结构&STL(七)——priority_queue
1 白话优先队列(priority_queue) 前面我们已经相继介绍了双向队列和FIFO特性的队列,这里我们还要接触另一个包含“队列”称呼的数据结构——优先队列。其实这三个数据结构名称看似很像,实则天差万别,通过下面的介绍你就会有很深的体会了。 那么何为优先队列呢,在优先队列中,元素被赋予优先级,当访问元素时,具有最高级优先级的元素先被访问。即优先队列具有最高级先出的行为特征。所以说队原创 2017-07-29 23:41:12 · 1328 阅读 · 0 评论 -
例说数据结构&STL(六)——heap
1 白话队列(queue) heap并不归属于STL容器组件,不像队列queue它们拥有自己独立的类定义,它只能借助其他诸如数组,vector等数据结构完成堆的构造操作。但是heap实际当中有很重要的应用,像大家最熟悉的堆排序,所以STL中还是有对应的函数定义的。 接触过堆排序的知道,所谓binary heap 就是一种complete binary tree(完全二叉树),也就是说,原创 2017-07-29 22:34:58 · 862 阅读 · 0 评论 -
例说数据结构&STL(五)——stack
1 白话栈(stack) 栈(statck)和队列相似,是一个带有数据存储特性的数据结构。栈中存储数据与队列相反是先进后出的(First In Last Out, FILO),我们可以对应于生活中垒椅子的经验来理解这种数据结构的特性。栈只有一个出口,像下面一摞椅子一样,只能在栈顶上增加元素,也只能从栈顶移出元素和访问元素。 2 STL中stack实战 2.1 头文件 STL中st原创 2017-07-29 21:18:22 · 928 阅读 · 0 评论 -
例说数据结构&STL(四)——queue
1 白话队列(queue) 大家一定听过这样一个关于队列的笑话,“在饭堂排队打饭,最大的欣慰不是前面的人越来越少,而是后面等的人越来越多”。从这句话我们就能探出队列数据结构的精髓,它是一种先进先出(First In First Out ,简称FIFO)的线性表。只允许在表的一端front进行入队,而在另一端进行出队。队列就是这样一个来源于生活的数据结构。 queue属于适配器容器类原创 2017-07-28 23:24:13 · 974 阅读 · 0 评论 -
例说数据结构&STL(三)——deque
1 白话双向队列(deque) deque双向队列是一种双向开口的连续线性空间,可以高效的在头尾两端插入和删除元素,deque在STL中接口上和vector非常相似,此外它还是STL中queue和stack的底层依赖组件。 如上图所示,deque拥有一个bitmap结构(称之为map,并不是STL中容器map),map中每一个元素指向一块连续的内存块,后者才是真正存储deque元素的原创 2017-07-27 23:38:09 · 1877 阅读 · 2 评论 -
例说数据结构&STL(二)——list
list(链表,准确来说STL中该模板类是双向链表,单向链表是slist(目前STL中还没有单独的容器实现),也是一种非常常用的数据结构,它和vector一样在属于STL中顺序容器的一种。list中各个元素之间也存在一个线性的逻辑次序,但是与vector极其不同的是,各单元的物理地址可以任意,无需是连续的空间分配。原创 2017-07-27 21:32:48 · 1265 阅读 · 0 评论 -
例说数据结构&STL(一)——vector
1 白话vector(向量) 数据结构vector又称为动态数组,因为它无需像普通数组定义的时候规定具体空间大小,一定程度上可以节约内存空间。但是它又具有普通数组连续物理内存存储的优势,即各元素之间构成一个线性的前后次序,数据的物理存储位置与其逻辑次序完全吻合,这样我们就可以常数级时间内通过秩(下标)访问每个元素。 当然STL中vector低层构建还是基于静态数组完成,只不过固定大小由系原创 2017-07-26 23:51:21 · 2209 阅读 · 0 评论 -
C++中数组、链表和vector等容器之间的区别
1. 各个容器之间区别① vector (连续的空间存储,可以使用[]操作符)快速的访问随机的元素,快速的在末尾插入元素,但是在序列中间岁间的插入,删除元素要慢,而且如果一开始分配的空间不够的话,有一个重新分配更大空间,然后拷贝的性能开销。② deque (小片的连续,小片间用链表相连,实际上内部有一个map的指针,因为知道类型,所以还是可以使用[],只是速度没有vector快)快原创 2016-10-12 09:05:04 · 16700 阅读 · 1 评论