1、vector

     空间运用的灵活性。
     实现技术——关键是对大小的控制以及重新配置时的数据移动效率。
     配置新空间、数据移动、释还旧空间
     erase(int position)先移动覆盖元素之后删除最后一个
     vector维护的是一个连续线性空间提供的是Random Access Iterators
     find(begin,end,k)如果找到k则iter指向k,如果没找打iter指向end。当在此插入元素的时候,如果插入成功返回*iter的时候的时候程序出错(内存的原因,可能是经过插入步骤之后iter指针失效,但从新遍历整个vector时是正确的,刚插入的元素也在里边)。--------不清楚为什么不失效???
     所谓的动态增加大小,并不是在原空间之后连续新空间(因为无法保证空间之后尚有可供配置的空间),对vector的任何操作,一旦引起空间重新配置,指向原vector的所有迭代器就都失效了。
     insert(position,n,x),插入点之后现有元素>=n,先把position+n----finish复制到finish之后,在吧position-----position+n复制到finish之前,之后在插入元素。插入点之后现有元素<=n,先插入n-(finish-position)个x,之后把position----finish(旧的那个,不是现在更行的finish)复制到x之后的内存,之后在开始插入其余的x。
     erase(first,last)先移动覆盖,即从last----finish到first开始往后,以后再释放内存。(局部区间的清楚操作)
2、list
     list不再能够像vector一样以普通指针作为迭代器,节点不保证在存储空间中连续存在。是一个双向链表,迭代器必须具备前移、后移的能力,所以list提供的是Bidirectional Iterators。
     插入(insert)和结合(splice)都不会造成原有的list迭代器失效。
     在insert的时候不像vector在position出插入,之后不能返回*iter,在这儿能返回*iter,不过是之前的元素,不是新插入的元素。即:插入完成后,新节点将位于哨兵迭代器所指节点的前方。
     transfer(position,first,last)--迁移操作。splice操作和reverse操作都是经过迁移操作完成的。
3、deque
     deque没有容量的概念(capacity)。因为它是动态地以分段连续空间组合而成,随时可以增加一段新的空间并连接起来。因此deque没必要提供所谓的空间保留(reserve)功能。
     提供Random Access Iterator,但他的迭代器并不是普通的指针。
     deque是由一段段的定量连续空间构成。最大的任务,就是在这些分段的定量的连续空间上,维护其整体连续的假象,并提供随机存取的接口。避开了重新配置、复制、释放的轮回,待嫁则是复杂的迭代器架构。
     分段的线性空间,就必须有重要控制器,而为了维持整体连续的假象,数据结构的设计及迭代器前进后退等操作都颇为繁琐,deque的实现代码分量远比vector或list都多得多。
     deque采用一块所谓的map做为主控。map是一小块儿连续空间,其每个元素都指向缓冲区,可以说这个元素是指向指针的指针。
     deque具备的结构::必须能够指出分段连续空间(缓冲区)在哪里,其次必须能够判断自己是否已经处于其所在缓冲区的边缘,如果是,一旦前进或后退时就必须跳跃至下一个或上一个缓冲区。为了能够正确的跳跃,deque必须随时掌握管控中心(map)。
     deque除了维护一个先前说过的指向map的指针外,也维护start,finish两个迭代器,分别指向第一缓冲区的第一个元素和最后一个元素(的下一位置)。此外,它当然也必须记住目前的map大小。因为一旦map所提供的节点不足,就必须重新配置更大的一块儿map。
     deque的最初状态(无任何元素时)保有一个缓冲区,因此,clear()完成之后恢复初始状态,也一样要保留一个缓冲区。
     

STL序列式容器的更多相关文章

  1. STL序列式容器学习总结

    STL序列式容器学习总结 参考资料:<STL源码剖析> 参考网址: Vector: http://www.cnblogs.com/zhonghuasong/p/5975979.html L ...

  2. STL——序列式容器

    一.容器概述与分类 1. STL容器即是将运用最广的一些数据结构实现出来.常用的数据结构有array, list, tree, stack, queue, hash table, set, map…… ...

  3. 数据结构-STL序列式容器总结

    根据序列在容器中的排列特性,将常见数据结构分为:序列式容器和关联式容器. 常见序列式容器有 1.array(build-in)c++內建 2.vector 3.heap(以算法方式呈现) 4.prio ...

  4. STL源码剖析读书笔记--第四章--序列式容器

    1.什么是序列式容器?什么是关联式容器? 书上给出的解释是,序列式容器中的元素是可序的(可理解为可以按序索引,不管这个索引是像数组一样的随机索引,还是像链表一样的顺序索引),但是元素值在索引顺序的方向 ...

  5. STL源码剖析之序列式容器

    最近由于找工作需要,准备深入学习一下STL源码,我看的是侯捷所著的<STL源码剖析>.之所以看这本书主要是由于我过去曾经接触过一些台湾人,我一直觉得台湾人非常不错(这里不涉及任何政治,仅限 ...

  6. STL源码剖析——序列式容器#1 Vector

    在学完了Allocator.Iterator和Traits编程之后,我们终于可以进入STL的容器内部一探究竟了.STL的容器分为序列式容器和关联式容器,何为序列式容器呢?就是容器内的元素是可序的,但未 ...

  7. STL源码剖析:序列式容器

    前言 容器,置物之所也.就是存放数据的地方. array(数组).list(串行).tree(树).stack(堆栈).queue(队列).hash table(杂凑表).set(集合).map(映像 ...

  8. STL学习笔记(序列式容器)

    Vector Vector是一个动态数组. 1.Vector的操作函数 构造.拷贝和析构 vector<Elem> c //产生一个空vector ,其中没有任何元素 vector< ...

  9. 7.5 C++基本序列式容器

    参考:http://www.weixueyuan.net/view/6402.html 总结: vector可以理解为可以在两端插入.删除数据的数组,它提供了丰富的成员函数,用于操作数据. begin ...

随机推荐

  1. easy ui 表单ajax和from两种提交数据方法

    说明: ①ajax在表单提交时需要将所有表单的控件的数据一一获取并赋值传到后台 ②form在提交时,只要给控件加name属性,在提交时就可以将表单数据提交到后台,不需要一一获取再进行赋值. ajax ...

  2. java 构造函数

    1.public className(){}. 2.名称与类名相同,无返回值,无返回类型,void也不行.(就是上边的形式,除了可以有参数). 3.有0个或多个参数. 4.每个类都至少有一个const ...

  3. 转载:传说中的T检验

    第二周结束:传说中的T检验 小耿2014-01-21 10:58 本文和上一篇笔记一样:语言十分啰嗦.请大家忍耐…… 以前我不懂统计的时候(现在也不懂),只知道数据出来了要做三件事:1,检验一下数据是 ...

  4. C# 写XML文件

    /// <summary>x /// 修改xml文件 /// </summary> /// <param name="dt"></para ...

  5. PD 脚本中列名注释用Name属性

    操作步骤:Database=>Generate Datatabase=>Format选项卡=>勾选 Generate name in empty comment项

  6. Workspace in use or cannot be created, choose a different one.--错误解决办法

    eclipse 使用一段时间后,有时会因为一些故障自己就莫名奇妙的关闭了,再打开时有时没有问题,有时有会提示错误 Workspace Unavailable: 原因:出现这种情况一般是workspac ...

  7. 团体程序设计天梯赛-练习集L1-020. 帅到没朋友

    L1-020. 帅到没朋友 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 当芸芸众生忙着在朋友圈中发照片的时候,总有一些人因为 ...

  8. 如何在CHROME里调试前端代码?

    以前看前端们调得很神的, 刚看书到这里,作一个记录,演练了一下,确实有点神!!! :) <!DOCTYPE html> <html lang="en"> & ...

  9. xcode 树形管理 cocos2d-x的资源

    把资源以目录的形式加入xcode中, 同时, 在加入时, 选择"Create Folder References for any  added folders", 而不是默认的&q ...

  10. Android:仿微信开场切换界面

    这实例很多人仿做,好实例还是不容错过!最重要是素材容易拿~ 效果: 默认3页面的切换,最后一个页面带按钮,点击进入另外一个页面 思路: 1.准备5个布局页面,1个为主函数布局页面,3个为切换的页面(其 ...