C++进阶_STL总结

C++进阶_STL总结

1.STL

  • STL是标准模板库,是高效的C++程序库,采用泛型编程思想对常见的数据结构(顺序表、链表、栈和队列、堆、二叉树、哈希)和算法(查找、排序、集合、数值运算)等进行封装,体现泛型编程程序设计思想以及设计模式
  • STL中包含了容器、适配器、算法、迭代器、仿函数以及空间配置器
  • STL设计理念:代码高复用性、运行速度高效率
    2.STL六大组件
    容器:序列式容器、关联式容器
    (1)序列式容器
  • array:静态顺序表
  • string:字符串
  • vector:动态顺序表
  • forward_list:带头结点的循环单链表
  • list:带头结点的双向循环链表
  • deque:动态二维数组
    (2)关联式容器
  • map:红黑树结构,key为唯一键值对
  • multimap:红黑树结构,key为可重复键值对
  • set:红黑树结构,value唯一
  • multiset:红黑树结构,value可重复
  • unordered_map:哈希结构,key为唯一键值对
  • unordered_multimap:哈希结构,key为可重复键值对
  • unordered_set:哈希结构,value唯一
  • unordered_multiset:哈希结构,value可重复
    (3)容器适配器
  • stack:底层是对deque的重新封装
  • queue:底层是对deque的重新封装
  • priority_queue:底层是对vector的重新封装,大根堆

适配器:将一个类的接口转换成用户希望的另一个类的接口,使原本接口不兼容的类可以一起工作
(1)容器适配器
stack、queue
(2)迭代器适配器
反向迭代器:反向迭代器++和–操作正好和正向迭代器相反,因此反向迭代器只需将正向迭代器进行重新封装即可
(3)函数适配器

算法:与数据结构相关算法、通用算法
(1)与数据结构相关算法:容器中的成员函数
(2)通用算法:排序、查找、排列组合、数据移动、拷贝、删除、比较组合、运算等
find算法:在查找时,与具体的数据结构无关,只要给出待查找数据集合的范围,find就可在该范围内查找,找到后返回该元素在区间中的位置,否则返回end
迭代器
迭代器是一种设计模式,让用户通过特定的接口去访问容器中的数据,不需要了解容器内部的底层数据结构。

C++中迭代器本质是一个指针,让该指针按照具体的结构去操作容器中的数据。

每个容器的底层结构都不同,为了降低算法使用容器时的复杂度,底层结构应该对于算法透明,迭代器就充当了算法与容器之间的转接层,因此每个容器的迭代器应该由容器设计者负责提供,然后容器按照约定给出统一的接口即可

实现原理
容器底层结构不同,导致其实现原理不同,容器迭代器的设计,必须结合具体容器的底层数据结构。比如vector与list,因为vector底层结构为一段连续空间,迭代器前后移动时比较容易实现,因此vector的迭代器实际是对原生态指针的封装;list底层结构为带头结点的双向循环链表,迭代器在移动时只能按照链表的结构前后依次移动,因此链表的迭代器需要对原生态的指针进行封装,因为当对迭代器++时,应该通过节点中的next指针域找到下一个节点

如果迭代器不能直接使用原生态指针操作底层数据时,必须要对指针进行封装

仿函数
仿函数:一种具有函数特征的对象,可以像调用函数一样调用此对象。该对象所在类必须自定义函数调用运算符operator(),重载该运算符后,就可在仿函数对象的后面加上一对小括号,以此调用仿函数所定义的operator()操作。一般配合算法,提高算法的灵活性

空间适配器
空间适配器:为各个容器高效的管理空间(空间的申请与回收)

你可能感兴趣的:(C++进阶)