C++ 之 STL初探

C++ STL初探

什么是STL

全称 Standard Template Library,即标准模板库。现在STL已成为C++的一部分,构建于C++编译系统中。地位相当于.Net Framework提供的大量泛型集合类。

STL的组成部分

  1. 容器(containers)
    数据结构的容器,提供类模板

  2. 适配器(adapters)
    以序列式容器为基础,提供的栈,队列和优先级队列

  3. 迭代器(iterators)
    类似指针,用于迭代容器内元素

  4. 算法(algorithm)
    包含一系列常见算法

  5. 空间配置器(allocator)
    负责对象的创建和销毁,与内存的申请和释放

  6. 仿函数(functor)
    即函数对象,是重载了()操作符的struct

容器

容器主要分为序列式容器关联式容器

  • 序列式容器
    通过元素在容器中的位置顺序存储和访问的容器。所谓序列式容器,其中的元素都可序(ordered),但未必有序(sorted),即元素集合呈线性关系排列,但未必是有序的。C++本身提供了array(数组),STL主要提供了vector, list, deque几种序列式容器,底层数据结构为数组或链表
    1. vector(容器)
      相当于动态数组,相当于C#中的List。 array是静态空间,一旦配置了就不能改变;vector是动态空间,随着元素的增多或减少,其配置空间的大小可以动态改变。
    2. list(链表)
      相当于双向链表,相当于C#中的LinkedList。 每次插入或删除一个元素,就分配或释放一个元素的空间;所以list对空间的控制十分精确,而且任何位置的插入或删除需要的时间都是常数。
    3. deque(双端队列)
      相当于双端队列(double-ended queue), 与vector同样是基于动态数组 实现,申请内存时是一段一段申请的,是一种双向开口的连续线性空间。可以在常数时间内在头尾分别做元素的的插入和删除操作。deque没有所谓容量的概念,因为它是以分段的连续空间组合而成,随时可以增加一段空间拼接起来。
  • 关联式容器
    通过键(key)存储和读取元素的容器。STL主要提供了set,map,multiset,multimap这几种关联式容器,底层数据结构为二叉树或哈希表
    1. set(集合)
      相当于没有Value的红黑树 ,相当于C#中的SortedSet。 内部元素依据其值自动排序,set内相同的数值元素只能出现一次。
    2. map(映射)
      相当于有Value的红黑树,相当于C#中的SortedDictionary。内部元素依据Key(键)自动排序,map内相同的key只能出现一次。
    3. unordered_set(无序集合)
      相当于没有Value的哈希表,相当于C#中的Set。内部元素是无序的,通过哈希函数直接获取元素。
    4. unordered_map(无序映射)
      相当于没有Value的哈希表,相当于C#中的Dictionary。内部元素无序的,通过哈希函数直接通过键获取键值。
    5. multiset(多重集合)
      允许重复元素的set
    6. multimap(多重映射)
      允许重复元素的map

适配器

适配器并不是第一类容器,因为它们并没有提供与元素的保存形式有关的真正数据结构实现,它们仅仅基于某种顺序容器来实现栈/队列的工作方式,并且适配器不支持迭代器,STL中各种排序, 查找, 变序等算法也都不适合容器适配器。
stl提供了三种适配器:
stack :栈,后进先出
queue:队列,先进先出
priority_queue:优先队列,最高优先级先出
适配器均支持如下三个成员函数
push:添加一个元素
pop:(从栈顶或队列头)删除一个元素
top:(从栈顶或队列头)返回一个元素

迭代器

mmp有些看不懂了,还是补补C++的基础回来再写,机制看起来比较复杂,人生苦短,我用C#

猜你喜欢

转载自blog.csdn.net/aawoe/article/details/79570226
今日推荐