deque源码1(deque概述.deque中的控制器) deque源码2(deque迭代器.deque的数据结构) deque源码3(deque的构造与内存.ctor.push_back.push_front) deque源码4(deque元素操作:pop_back.pop_front.clear.erase.insert) deque的迭代器 deque是分段连续空间,维持其"整体连续"的假象任务,落在了迭代器的operator++和operator--两个运算子身上. 对于ope…
deque源码1(deque概述.deque中的控制器) deque源码2(deque迭代器.deque的数据结构) deque源码3(deque的构造与内存.ctor.push_back.push_front) deque源码4(deque元素操作:pop_back.pop_front.clear.erase.insert) pop_back()函数如下: void pop_back(){ if(finish.cur!=finish.first){ //最后缓冲区至少有一个元素 --finis…
deque源码1(deque概述.deque中的控制器) deque源码2(deque迭代器.deque的数据结构) deque源码3(deque的构造与内存.ctor.push_back.push_front) deque源码4(deque元素操作:pop_back.pop_front.clear.erase.insert) deque的构造与内存 deque自行定义了两个专属的空间配置器: protected: typedef simple_alloc<value_type,Alloc>…
deque源码1(deque概述.deque中的控制器) deque源码2(deque迭代器.deque的数据结构) deque源码3(deque的构造与内存.ctor.push_back.push_front) deque源码4(deque元素操作:pop_back.pop_front.clear.erase.insert) deque概述 vector是单向开口的连续性线性空间,deque则是一种双开的连续性空间,即两边都可以进行插入和删除操作(vector也可进行头部的删除.插入操作,但效…
前言 迭代器是将算法和容器两个独立的泛型进行调和的一个接口. 使我们不需要关系中间的转化是怎么样的就都能直接使用迭代器进行数据访问. 而迭代器最重要的就是对operator *和operator->进行重载, 使它表现的像一个指针. 类型 迭代器根据移动特性和实施操作被分为5类 input iterator(输入迭代器) : 迭代器所指的内容不能被修改, 只读且只能执行一次读操作. output iterator(输出迭代器) : 只写并且一次只能执行一次写操作. forward iterato…
准备知识 什么是迭代器? 迭代器是链接容器和算法的桥梁,所有的算法都通过迭代器操作容器中的数据 迭代器是一种智能指针,最重要的操作符重载就是operator*,operator-> 迭代器的实现需要知道容器的具体细节,因此每一种容器都对应自己特有的迭代器,但是迭代器的接口是一致的 Traits编程技巧 目的:提取出容器中存放的数据类型 核心是使用模板技术,在编译期就确认需要调用的函数 嵌套从属名称: template <typename T> class Data { typedef T…
今天的主角是HashSet,Set是什么东东,当然也是一种java容器了.      现在再看到Hash心底里有没有会心一笑呢,这里不再赘述hash的概念原理等一大堆东西了(不懂得需要先回去看下HashMap了),需要在啰嗦一句的是hash表是基于快速存取的角度设计的,也是一种典型的空间换时间的做法(这个在分析HashMap中都有讲过).那么今天的HashSet它又是怎么一回事的,他的存在又是为了解决什么问题呢?      先来看下Set的特点:Set元素无顺序,且元素不可以重复. .想到了什么…
前言: Iterator翻译过来就是迭代器的意思.在前面的工厂模式中就介绍过了iterator,不过当时介绍的是方法,现在从Iterator接口的设计来看,似乎又是一种设计模式,下面我们就来讲讲迭代器模式到底是怎么实现的. 一.定义 提供一种方法,顺序访问一个集合对象中的各个元素,而又不暴露该对象的内部表示.(可以理解为遍历) 二.适用场景 1.访问一个集合对象的内容而无需暴露它的内部表示 2.为遍历不同的集合结构提供一个统一的接口 重要的是对第二点的理解,前面我们在工厂方法中讲过iterato…
本文主要基于Hadoop1.1.2分析HDFS中的关键数据结构. 1 NameNode 首先从NameNode开始.NameNode的主要数据结构如下: NameNode管理着两张很重要的表: 1)  filename->blocksequence (namespace) 2)  block->machinelist ("inodes") 第一张表保存在磁盘上,第二张表在每次NameNode启动的时候重建.这两张表的信息分别保存在FSDirectory和BlocksMap中…
最近在整理数据结构方面的知识, 系统化看了下Java中常用数据结构, 突发奇想用动画来绘制数据流转过程. 主要基于jdk8, 可能会有些特性与jdk7之前不相同, 例如LinkedList LinkedHashMap中的双向列表不再是回环的. HashMap中的单链表是尾插, 而不是头插入等等, 后文不再赘叙这些差异, 本文目录结构如下: LinkedList 经典的双链表结构, 适用于乱序插入, 删除. 指定序列操作则性能不如ArrayList, 这也是其数据结构决定的. add(E) / a…