zoukankan      html  css  js  c++  java
  • C++ STL 之 容器

            根据侯捷老师的介绍,STL > 我们常说的标准库函数 。STL(Standard Template Library)中还包括了容器(containers),迭代器(iterators),算法(algorithms),分配器(allocators),适配器(adapters),仿函式(functors)。他们之间的关系如下所示:迭代器是算法与容器之间的桥梁。

           在C++中,我们包含的头文件中没有.h 如:#include<vector>  。新式头文件内的组件封装在命名空间std当中,一般我们使用 using  namespace std;

           在新式C语言中,也没有.h了  改为 如:#include<cstdio>  在原先的前面加上一个c,代表是c语言 。但是旧式的#include<stdio.h>也是兼容的

           容器可以分为顺序容器和关联容器。顺序容器有 array,vector,list,deque,forward_list。关联容器有set,multiset,map,multimap。map中有关键字和键值,通过访问关键字可以得到对应的键值。set中关键字和键值是同一个。前缀为multi的表示,在插入元素时,可以有重复的键值,而在set和map中,若插入相同的元素,则不会生成新的元素。关联容器的实现方式一般为红黑树。

          array的大小在初始化后就固定了,不可以改变,它的内存是连续的;vector.push_back(),可以在它的尾端一直插入元素,当它的空间不足时,它在单前的内存上扩展一倍,如:当前为3,扩展后为6,再扩展为12,24,48;vector.size(),得到是它当前容器中的数据量,而vector.capacity(),得到的是当前容器最大可以放多少元素;deque可以说是双端队列,它在内存中的储存形式是以段的形式进行的,如下图所示

    deque它是分段的,每一段内是连续的,段间是间隙的,但是这并不我们使用它的迭代器,因为deque内部会检测,iter.begin(),iter.end();list是可以在两端都进行增加增加新的数据,它在内存中的储存空间不是连在一起的,内存扩展方式为需要一个就寻找一个,将地址连接到空余的地方;forward_list是单端的列表,内存方式也和list是一样的。

         注意:iter.begin()是指向容器的第一个元素的地址,iter.end()指向的是最后一个元素的下一个地址,如果使用*(iter.end()  )将会超出界限,发生不可预知的错误。

      

           

    To get,you have to give.To give,you need learn to insist.If you really find it is hard for you,then you quit.But once you quit.Don't complain.
  • 相关阅读:
    Swing中的并发使用SwingWorker线程模式
    使用批处理打二次开发包
    【转】批处理删除SVN文件
    EAS BOS ORMapping的研究
    EAS BOS ORMapping 元数据解析示例
    ORMapping学习
    EAS BOS数据查询默认会查分录的分析
    【Oracle】常用查询
    KDTable公式解析提示信息设置
    【转】Swing多线程编程
  • 原文地址:https://www.cnblogs.com/hit-ycy/p/10824358.html
Copyright © 2011-2022 走看看