zoukankan      html  css  js  c++  java
  • STL

    STL 是 C++ 标准程序库的核心。STL 内的所有组件都由模板构成,因此元素可以是任意型别。

    STL六部分为:容器(containers)、迭代器(iterators)、空间配置器(allocator)、配接器(adapters)、算法(algorithms)、仿函数(functors)。

    一,容器(containers)

    用于管理某一类对象的集合。

    Sequence Containers(序列容器)

    向量(vector):连续存储数据,在当前空间不够时,从新分配当前2倍的空间,并把数据进行拷贝(因此,插入数据可能导致迭代器失效)。

            erase删除元素时,会把后面数据都向前移动,因此耗时且可能让迭代器失效。

    列表(list):有节点构成的双向链表。空间运用绝对精准不浪费。不支持随机访问。

    双向对列(deque):存储连续的指向不同元素的指针构成的数组。可向前或向后扩展。

              实质是分段连续的,由中控器map维持其整体连续的假象,每段由vector实现。

    栈(stack):先进后出的排列。基于deque。

    队列(queue):先进先出的排列。基于deque。

     优先队列(priority_queue):元素按照某种次序的队列。

    Associative Containers(关联容器)

    集合(set):节点构成红黑树,节点按照某种方式排序,且任意两个节点数据不同。不能直接改变元素值,之能删除再插入。

    多重集合(multset):与set区别为允许存在两个相同元素的集合。

    映射(map):由键值对组成的集合,内部有序。

    多重映射(multimap):与map区别为允许相同键存在的映射,可以通过lower_bound与upper_bound找到某个key下所有value。

     Unordered Containers(无序容器)

    无序集合(Unordered Set):采用HashTable Separate Chaining 实现

    unordered_multiset:Hash组织的map,关键字可以重复。

    无序映射(Unordered Map):采用HashTable Separate Chaining 实现

    unordered_multimap:Hash组织的map,关键字可以重复。

    二,迭代器(iterators)

    用于遍历容器的元素集合。

    常说,迭代器在STL中用来将算法和容器联系起来,起着一种黏和剂的作用。

    迭代器分为:iterator,const_iterator(只能读)

    前向迭代器(Forward iterator) :只能够以自增方式 向前迭代。

    双向迭代器(Bidirectional iterator) :迭代器只能自增自减。如:set,map等。

    随机访问迭代器(Random-access iterator):可以进行,迭代器+=n。如:vector,deque。

    输入型迭代器(Input iterator):向前选代时能够读取value。即按顺序依次读取。

    输出型迭代器(Output iterator): 向前迭代时能够涂写value。即按顺序依次写入。

    三,空间配置器(allocator)

    负责空间分配与管理。

    第一级配置器直接采用malloc和free进行空间分配。

    第二级配置器采用策略避免过多内存碎片。

      对于超过128字节,采用一级配置器。对于空间消耗采用8的整数倍,维护一个16个free-list存储小块未使用空间,分别用来存储8,16,24,....的小块空间。若free-list没有空间则申请128字节并放入free-list。

    四,配接器(adapters)

    用于将一个类的接口转为另一个类的接口。

    五,算法(algorithms)

    作用于容器,如对容器的初始化,排序等操作。

    STL的算法有两种意义:最常用或只管的运用,最泛化的过程。如sort(),第一个意义为排序,第二个意义为任何相邻的操作operator都为true

    六,仿函数(functors)

    类似函数的行为,但仅仅是operator等。

  • 相关阅读:
    Linux 头文件详解
    Linux 进程运行状态
    配置uboot指定nfs挂载根文件系统
    (实例)Linux 内核添加exfat驱动
    Linux 内核 编译模块
    简单添加自己的驱动程序到Linux内核树中
    Linux 生成随机mac地址,并固化到本地
    (转)为什么ssh一关闭,程序就不再运行了?
    Ubuntu 安装 QtCreator (version : Qt 5.9.8)
    Ubuntu 固定自己的IP
  • 原文地址:https://www.cnblogs.com/lmhyhblog/p/12404844.html
Copyright © 2011-2022 走看看