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. iOS开发学习路线图

    很多初学iOS开发的人会经常问:“我想学iOS应该从何入手呢?”.作为一个做了2年多各种iOS开发的程序员,只想写写自己的一些心得体会,好和体验与不好的体验.写的不好,请多包涵.希望能起到抛砖引玉的作 ...

  2. Orcale Function Sequence

    Orcale Function Sequence. 1 Create Or Replace Function F_Get_Sequence(As_Companyno In Varchar2, As_T ...

  3. OData 集成

    OData 集成 文档目录 本节内容: 简介 安装 安装Nuget包 设置模块依赖 配置你的实体 创建控制器 示例 获取实体列表 请求 响应 获取单个实体 请求 响应 获取单个实体及导航属性 请求 响 ...

  4. 简单3d RPG游戏 之 002 生命条(二)

    在游戏中,游戏人物的血条可能会因为受伤或吃血瓶而长度变化,所以需要将血条的长度单独提出来作为一个变量,方便直接修改数值. public float healthBarLength; 改变生命值函数如下 ...

  5. play2 控制台打印乱码问题

    修改 play安装目录下,framework/build.bat java -Xms512M -Xmx1024M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:Ma ...

  6. PAT-乙级-1041. 考试座位号(15)

    1041. 考试座位号(15) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 每个PAT考生在参加考试时都会被分 ...

  7. Samza文档翻译 : Concepts

    此页介绍啊Samza的一些高层级概念. Streams Samza处理Streams(流).流由同一类型的不可变的消息组成.例如,一个流可以是对一个网站的所有点击,或者对一个数据库表的所有更新,或者一 ...

  8. pthread_create用法

    linux下用C开发多线程程序,Linux系统下的多线程遵循POSIX线程接口,称为pthread. #include <pthread.h> int pthread_create(pth ...

  9. DJANGO结合jQuery cxSelect 作二级菜单过滤

    EN,到这个阶段,基本功能算是完成了. 使用了jQuery cxSelect这个插件. http://code.ciaoca.com/jquery/cxselect/ 相关代码如下: html: &l ...

  10. Java发送post请求

    package com.baoxiu.test; import java.io.BufferedReader;import java.io.InputStreamReader;import java. ...