zoukankan      html  css  js  c++  java
  • (三)容器探索:顺序容器

    一、list

           1、一个list包括一个node,本身是一个指针,所以一个list大小为四字节;

           2、一个node抱括前后两个指针,以及一个数据;

      3、iterator迭代器本身并不是指针,而是一个类(因为链表内部是分离的,需实现++等操作)(除了vector, array,其他的迭代器都是类),

    并且类内实现了众多的操作符重载;

           4、迭代器实现了前加和后加,和int类似,前加返回指针,可以连续操作;后加返回值,不能连续操作。

    二、迭代器的设计原则

      迭代器需实现算法所需的三种操作:

      category:迭代器的移动性,(++, --, +=i.....)

      difference_type: 两个iterator之间的距离的表现

      value_type: 元素类型(string等等)

      还有两种reference和pointer

      

    三、vector

      1、内含3个指针:start, end, end_of_storage

      

      2、push_back内存不足时,会分配2倍的内存,并将插入元素的前、后内容都拷贝过去(同时还有原vector元素的析构),

    因此为耗时的操作。

      3、内存是连续的,所以迭代器只需指针实现

    四、array

      内部其实就是一个数组

      

    五、deque

      1、分段连续,由多个buffer组成。buffer的顺序由map决定(vector,内部是指针);

      2、扩充时,另外分配buffer,前扩则放在map前,后扩放在map后,可实现双向扩充;

      3、迭代器包括4个元素,其中node指向控制中心(map),指向当前的buffer;first为当前buffer的首元素,last为末尾元素。当到达

    边界时,node会加1,指向下一个buffer,从而实现连续空间的假象。

      4、插入时会进行判断:如果靠近前端,则会移动前端元素,空出位置,反之则反。

    六、stack和queue

           1、底层容器默认为deque,但也可以选择list

               

           2、因为不允许遍历,所以没有迭代器;

      3、stack可以选择vector作为底层结构,queue不行:没有pop_front操作。都不可以选择map/set作为底层结构;

          

  • 相关阅读:
    ASP.NET 2.0服务器控件开发之基本概念篇
    ASP.NET 2.0的URL映射的实现方法
    Asp.net中防止用户多次登录的方法
    SSRS:使用SQL2008教程学习Reporting Services之数据库AdventureWorks2008问题_学习笔记1
    ASP.NET服务器控件编程之热身运动
    ASP.NET2.0服务器控件开发之实现事件
    datalist 或者repeater分页
    .Net 上传图片加水印
    datalist 全选
    深入理解JavaScript中的函数
  • 原文地址:https://www.cnblogs.com/573177885qq/p/9952945.html
Copyright © 2011-2022 走看看