STL_学习记录

9 篇文章 0 订阅

STL

建立数据结构与算法的一套标准,降低程序间耦合性关系,提升各自的独立性,弹性,交互操作。是一门以泛型思维为基础系统化的调理分明的软件组件分类学,可以可以看成软件组件库

STL 常规功能

基础的

  1. 可被赋值的
  2. 不需要任何参数就可以构造的
  3. 可判断是否等同的
  4. 可比较大小的
  5. 正规的

进阶功能

  1. 具有输入功能的迭代器
  2. 具有输出功能的迭代器
  3. 单项迭代器
  4. 双向迭代器
  5. 随机存储迭代器
  6. 一元函数
  7. 二元函数
  8. 传回真假值得一元判断式
  9. 传回真假值得二元判断式

更高阶功能

  1. 序列容器
  2. 关联容器

实现时完成抽象概念加以系统化

通俗的描述STL

STL 实现的是依据泛型思维假设起来的一个概念结构,这个以抽象概念为主体而不是 以实际类为主体的结构形成一个严谨的接口标准,在此接口下任何组件都有最大的独立性
并且以迭代器胶合起来
以配置器相互配接
或者以仿函数动态选择某种策略

STL 六大组件

容器 containers

使用各种数据结构存放数据
使用上 vector、list、deque、set 、map 等
实现上是 一种模板类 template class

算法 algorithms

使用上 sort 、search 、copy 、erase
实现上是一种函数模板 function template

迭代器 iterators

扮演容器与算法之间的胶合剂,是所谓的泛型指针,有五种类型,以及所衍生的变化
实现的角度看 operator* 、operator->、operator++、operator-- 指针相关操作予以重载的类模板
所有STL 容器都附带有自己专属的迭代器,但是只有容器设计者才知道如何遍历自己的元素
注:原生指针也是一种迭代器 native pointer

仿函数 functor

行为类似函数,可以当做算法得某种执行策略
实现上:是一种重载了 operator () 的类 或 class template
一般函数指针可以视为狭义的仿函数

配接器 adapters

是一种用来修饰 容器containers、仿函数 functor 、迭代器 iterator 接口的东西
使用上 queue 和 stack 虽然看似容器 实际上,只能算作配接器,因为底层借助 deque ,所有操作都由 deque供应
使用上:
改变 functor 的 称为 functor adapter
改变 container 的称为 container adapter
改变 iterator 的称为 iterator adaoter

配置器 allocators

负责空间配置与管理
从实现的角度 :配置器是实现了
动态空间配置
空间管理
空间释放的 class template

注: 在使用STL 时 应按照C++ 标准使用无扩展名的头文件

六大组件间关系

容器contianer 通过 配置器 alllocators 取得数据存储的空间
算法algorithm 通过迭代器 iterator 存取 容器 contianer 的内容
仿函数 functor 可以协助 algorithm 完成不同的策略变化
配接器 adapter 可以修饰或套结 仿函数functor
配接器 adapter 可以修饰 容器 contianer 、迭代器 iterator

STL 版本

H P 版本 始祖版本
P.J. Plauger 实现版本
Pouge Wave 实现版本
STLport 实现版本
SGISTL 实现版本

gcc 中采用的SGI STL 实现

SGI STL 被gcc 采用 可以在 gcc include 找到所有stl 头文件

SGI STL 文件分布

  1. C++ 标准规范下的C头文件(无扩展名)
    例:cstdio,cstdlib,cstring等
  2. C++ 标准程序库中不属于STL 范畴者
    例如:stream,string等
  3. STL 标准头文件(无扩展名)
    例如:vector,deque,list,map,algorithm,functional等
  4. C++ standard (C++标准)定案前 HP 所规范的STL 头文件
    例如:vector.h, deque.h , list.h ,map.h , algo.h function.h 等
  5. SGI STL 内部文件(STL 真正实现的位置)
    例如:stl_vector.h ,stl_deque.h , stl_list.h, stl_map.h , stl_algo.h、stl_function.h
STL 标准头文件 对应内部实现文件
  1. algorithm -> stl_algoruthm.h
  2. daque -> stl_deque.h
  3. functional -> stl_function,h
  4. hash_map -> stl_hash_map.h
  5. hash_set -> stl_hash_set.h
  6. iterator -> stl_iterator.h
  7. list -> stl_list.h
  8. map-> stl_map.h
  9. memory -> 定义 auto_ptr , 包含
    stl_algobase.h
    stl_alloc.h
    stl_construct.h
    str_tempbuf.h
    stl_uninitialized.h
    stl_raw_storage_iter.h
  10. numeric -> stl_numeric.h
  11. pthread_alloc ->与Pthread 相关 node allocator
  12. queue -> stl_queue.h
  13. rope -> stl_rope.h
  14. set -> stl_set.h
  15. slist ->stl_slist.h
  16. stack -> slt_stacl.h
  17. utility -> stl_relops.h stl_pair.h
  18. vector -> stl_vector.h
SGI STL 内部私用文件功能
  1. stl_algo.h
    算法(数值类型除外)
  2. stl_algobase.h
    基本算法:swap , min , max , copy , copy_backward ,copy_n ,fill ,fill_n, mismatch , equal , lexicographical_compare
  3. stl_alloc.h
    空间配置器 std::alloc
  4. stl_bvector.h
    bit_vector
  5. stl_config.h
    针对各家编译器特性定义各种环境变量
  6. stl_construct.h
    构造/析构 基本工具 construct() destory()
  7. std_deque.h
    双向开口的队列
  8. stl_function.h
    函数对象 或 仿函数
  9. stl_hash_fun.h
    hash function
    杂凑函数(哈希函数) 用于hash_table
  10. stl_hash_map.h
    用hast-table 完成的map , multimap
  11. stl_hash_set .h
    用哈希表 hash-table 完成的 set , multiset
  12. stl_hashtable.h
    hash-table 哈希表
  13. stl_heap .h
    heap 堆算法:push_heap , pop_heap , make_heap , sort_heap
  14. stl_iterator.h
    迭代器及其相关配接器,并定义迭代器
    advance , distance
  15. stl_list.h
    单项 双向 链表
  16. stl_map
    映射表
  17. stl_mulitmap.h
    多键映射表
  18. stl_mulitset.h
    多键集合
  19. stl_numeric.h
    数组算法
    accumulate
    inner_product
    partial_sum
    adjacent_difference
    power
    iota
  20. stl_pair.h
    成对组合
  21. stl_queue.h
    队列
    priority_queue 高权先行队列
  22. stl_raw_storage_iter.h
    定义一种输出迭代器
  23. stl_relops.h
    定义四个运算符重载
    operator!= , operator> , operator<= , operator>=
  24. stl_rope.h
    大量 大规模字符串
  25. stl_set.h 集合
  26. stl_slist.h single list 单向穿行链表
  27. stl_stack.h 堆栈
  28. stl_tempbuff.h
    temporary_buffer class 在 算法 stl_algo 中使用
  29. stl_tree.h 红黑树
  30. stl_uninitialized.h
    内存管理工具
    uninitialized_copy
    uninitialized_fill
    uninitialized_fill_n
  31. stl_vector 向量容器
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老黑675

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值