源码之前,了无秘密  ——侯杰

  序列式容器                    关联式容器         

  array(build in)                  RB-tree

  vector                        set

    heap                        map

      priority-queue                multiset

  list                          multimap

  slist                       hashtable

  deque                        hash_set

    stack(配接器)                   hash_map

    queue(配接器)                  hash_multiset

                             hash_multimap

第四章:序列式容器                      

  C++语言本身提供了一个序列式容器array

  array:分配静态空间,一旦配置了就不能改变。

  vector:

    分配动态空间。维护一个连续线性空间,迭代器类型为:Random Access Iterators

    空间配置 typedef simple_alloc<value_type, Alloc> data_allocator

    所谓动态增加空间大小,并不是在原空间之后接续新空间,而是以原大小的两倍另外配置一块较大

    的空间,然后将原内容拷贝过来,然后才开始在原内容之后构造新元素,并释放原空间。因此,

    对vector的任何操作,一旦引起空间重新配置的话,指向原vector的所有迭代器就都失效了,

    这是程序员易犯的一个错误。

    可用的方法或函数:begin, end, size, capacity, empty, front, back, find, erase, clear, insert,

    push_back, pop_back

  list:非连续空间

//配置,释放,构造,销毁一个节点
protected:
//配置一个节点并传回
link_type get_node() {
return list_node_allocator::allocate();
}
//释放一个节点
void put_node(link_type) {
list_node_allocator::deallocate(p);
}
//产生(配置并构造)一个节点,带有元素值
link_type create_node(const T& x) {
link_type p = get_node();
construct(&p->data,x); //全局函数,构造/析构基本函数
return p;
}
//销毁(析构并释放)一个节点
void destroy_node(link_type p) {
destroy(&->data);
put_node(p);
}

  remove(const T& value) -> 将数值为values的所有元素移除

  void list<T,Alloc>::unique() ->移除数值相同的连续元素。注意是“连续”

  list的方法和函数: begin, end, empty, size, front, back,  find, insert, erase, clear, remove,

  push_front, push_back, pop_front, pop_back, unique, [ sort, splice, merge, reverse -> transfer

  deque:双向开口的连续线性空间,迭代器类型Random Access Iterator, 但是迭代器非常复杂,

  要维护一个地址队列

  与vector的差异:

      一在于deque可以常数时间内对起头端进行插入或移除操作

      二在于deque没有所谓容量的观念,动态的以分段连续空间组合而成,随时可以增加一段新的

      空间并链接起来。

  deque的最大任务,便是在这些分段的定量连续空间上,维护其整体连续的假象,并提供随机存取的接口,

  避开了重新配置,复制,释放的轮回,代价则是复杂的迭代器架构。

  deque的方法和函数:

  begin,end, empty, size, front, back, find, insert, erase, clear, push_front, push_back,

  pop_front, pop_back, reverse_map_at_back(size-type,node_to_add=1)

  reverse_map_at_front(size_type, node_to_add=1)

  stack:没有迭代器

  方法或函数:empty, size, top, push, pop     stack<int, list<int>> istack

  queue:empty, size, front, back, push, pop         queue<int, list<int>> iqueue

  heap:扮演priority queue的助手 使用binary max heap

  方法或函数:push_heap, pop_heap(first, last), sort_heap, make_heap

  

  priority_queue: empty,size, top, push, pop

  slist:单向链表

  方法或函数:size,begin,end, find, insert

重温《STL源码剖析》笔记 第四章的更多相关文章

  1. 《STL源码剖析》——第四章、序列容器

     1.容器的概观与分类 所谓序列式容器,其中的元素都可序(ordered)[比如可以使用sort进行排序],但未必有序(sorted).C++语言本身提供了一个序列式容器array,STL另外再提供v ...

  2. STL源码剖析读书笔记之vector

    STL源码剖析读书笔记之vector 1.vector概述 vector是一种序列式容器,我的理解是vector就像数组.但是数组有一个很大的问题就是当我们分配 一个一定大小的数组的时候,起初也许我们 ...

  3. c++ stl源码剖析学习笔记(一)uninitialized_copy()函数

    template <class InputIterator, class ForwardIterator>inline ForwardIterator uninitialized_copy ...

  4. 《STL源码剖析》读书笔记

    转载:https://www.cnblogs.com/xiaoyi115/p/3721922.html 直接逼入正题. Standard Template Library简称STL.STL可分为容器( ...

  5. 通读《STL源码剖析》之后的一点读书笔记

    直接逼入正题. Standard Template Library简称STL.STL可分为容器(containers).迭代器(iterators).空间配置器(allocator).配接器(adap ...

  6. 面试题总结(三)、《STL源码剖析》相关面试题总结

    声明:本文主要探讨与STL实现相关的面试题,主要参考侯捷的<STL源码剖析>,每一个知识点讨论力求简洁,便于记忆,但讨论深度有限,如要深入研究可点击参考链接,希望对正在找工作的同学有点帮助 ...

  7. 《STL源码剖析》相关面试题总结

    原文链接:http://www.cnblogs.com/raichen/p/5817158.html 一.STL简介 STL提供六大组件,彼此可以组合套用: 容器容器就是各种数据结构,我就不多说,看看 ...

  8. STL源码剖析之组件

    本篇文章开始,进行STL源码剖析的一些知识点,后续系列笔记全是参照<STL源码剖析>进行学习记录的 STL在现在的大部分项目中,实用性已经没有Boost库好了,毕竟STL中仅仅提供了一些容 ...

  9. 【STL 源码剖析】浅谈 STL 迭代器与 traits 编程技法

    大家好,我是小贺. 点赞再看,养成习惯 文章每周持续更新,可以微信搜索「herongwei」第一时间阅读和催更,本文 GitHub : https://github.com/rongweihe/Mor ...

  10. STL"源码"剖析-重点知识总结

    STL是C++重要的组件之一,大学时看过<STL源码剖析>这本书,这几天复习了一下,总结出以下LZ认为比较重要的知识点,内容有点略多 :) 1.STL概述 STL提供六大组件,彼此可以组合 ...

随机推荐

  1. Android后台消息推送-android学习之旅(71)

    建议使用第三方的sdk,比如极光推送,小米推送,百度推送

  2. Linux 中环境变量设置

    本文主要整理自以下博文: .bash_profile和.bashrc的什么区别及启动过程 linux环境变量设置方法总结(PATH/LD_LIBRARY_PATH) .bash_profile 和 . ...

  3. JAVA之旅(一)——基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算

    JAVA之旅(一)--基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算 Android老鸟重新学一遍JAVA是什么感觉?枯燥啊,乏味啊,而且归纳写博客,都 ...

  4. andrid面试题

    下面的题目都是楼主在android交流群大家面试时遇到的,如果大家有好的题目或者好的见解欢迎分享,楼主将长期维护此帖. 某公司高级面试题(2015-03-14)[感谢helder分享] 1.详述And ...

  5. AngularJS中的依赖注入

    依赖注入 | Dependency Injection 原文链接: Angular Dependency Injection翻译人员: 铁锚翻译时间: 2014年02月10日说明: 译者认为,本文中所 ...

  6. Ext.Net_1.X_WINDOW遮罩层被GridPanel挡住

    通过调试HTML代码,发现其实是DIV. chrome 中修改DIV Z:INDEX 就不被遮住了?但是又晓得如何修改window的Z:INDEX.那就修改"背景"GP的吧.

  7. 在自己的服务器上安装GitBook

    更新时间:2016-08-05 更新说明: 由于在 Linux 内核的机器上安装 Calibre 需要安装的依赖库过多,故不推荐在此类机器上使用格式转换功能.你可以阅读 在自己的电脑上安装GitBoo ...

  8. C 语言内存区域分配(进程的各个段)详解

    C语言可执行代码结构  名称 内容 代码段  可执行代码.字符串常量 数据段  已初始化全局变量.已初始化全局静态变量.局部静态变量.常量数据 BSS段  未初始化全局变量,未初始化全局静态变量 栈 ...

  9. 【一天一道LeetCode】#11Container With Most Water

    一天一道LeetCode系列 (一)题目 Given n non-negative integers a1, a2, -, an, where each represents a point at c ...

  10. ITU-T Technical Paper: IP网络测量模型

    本文翻译自ITU-T的Technical Paper:<How to increase QoS/QoE of IP-based platform(s) to regionally agreed ...