STL库简介

C++ STL库全面介绍

C++ 标准模板库(STL)提供了丰富的通用数据结构和算法组件,主要分为以下几类:

1. 容器(Containers)

  • 序列容器:存储有序元素集合
    • vector:动态数组,支持快速随机访问
    • deque:双端队列,两端高效插入/删除
    • list:双向链表
    • forward_list(C++11):单向链表
    • array(C++11):固定大小数组
    • string:字符串专用容器
  • 关联容器:基于键的排序集合(通常红黑树实现)
    • set:唯一键集合,有序
    • map:键值对映射,键唯一有序
    • multiset:允许重复键的有序集合
    • multimap:允许重复键的有序映射
  • 无序关联容器(C++11):哈希表实现
    • unordered_set:唯一键哈希集合
    • unordered_map:键值对哈希映射
    • unordered_multiset:重复键哈希集合
    • unordered_multimap:重复键哈希映射
  • 容器适配器:基于其他容器实现的接口
    • stack:LIFO(后进先出)栈
    • queue:FIFO(先进先出)队列
    • priority_queue:优先级队列(最大堆)

2. 算法(Algorithms)

  • <algorithm> 中定义,操作于容器上的泛型算法
    • 排序sort, stable_sort, partial_sort
    • 查找find, find_if, binary_search
    • 数值操作accumulate, inner_product
    • 集合操作set_union, set_difference
    • 修改序列copy, move, transform
    • 删除remove, unique
    • 堆操作make_heap, push_heap
    • 遍历for_each(C++11起支持并行版本)

3. 迭代器(Iterators)

  • 提供访问容器元素的通用方法
    • 类别:输入/输出、前向、双向、随机访问迭代器
    • 适配器:reverse_iterator, move_iterator(C++11)
    • 特殊迭代器:back_inserter, front_inserter

4. 函数对象(Function Objects)

  • 行为类似函数的对象
    • 头文件:<functional>
    • 包含:算术/关系/逻辑运算的函数对象
    • 适配器:bind(C++11), mem_fn
    • 新特性:function(类型擦除的函数包装器), lambda(C++11)

5. 智能指针(C++11起)

  • 自动内存管理
    • unique_ptr:独占所有权指针
    • shared_ptr:共享所有权指针
    • weak_ptrshared_ptr的弱引用

6. 数值处理

  • 头文件:<numeric>, <cmath>, <complex>, <random>(C++11)
  • 随机数引擎和分布(C++11)
  • 复数运算:complex

7. 时间库(C++11起)

  • 头文件:<chrono>
  • 时间点:time_point
  • 时间段:duration
  • 时钟:system_clock, steady_clock

8. 异常处理

  • 标准异常类体系(继承自exception):
    • logic_error(如invalid_argument
    • runtime_error(如overflow_error

9. 字符串处理

  • stringwstring(在<string>中)
  • 正则表达式支持(C++11):<regex>

10. I/O流库

  • 头文件:<iostream>, <fstream>, <sstream>
  • 类:istream, ostream, fstream, stringstream

11. 线程支持库(C++11起)

  • <thread>, <mutex>, <atomic>, <future>
  • 线程管理:thread, async
  • 同步机制:mutex, condition_variable

12. 其他实用组件

  • 工具类:
    • pair(键值对)
    • tuple(C++11,多元组)
  • 类型特征:<type_traits>(C++11)
  • 编译期有理数:ratio(C++11)

常用容器选择指南

需求场景推荐容器
快速随机访问vector, array
频繁头尾插入删除deque
中间插入/删除list(小数据量)
唯一键快速查找(有序)map/set
唯一键最快查找(无序)unordered_map/set
LIFO栈stack(适配器)
FIFO队列queue(适配器)
优先级队列priority_queue

重要原则

  • 默认首选 vector(缓存友好)
  • 需要键值映射时首选 unordered_map(O(1)查找)
  • 当元素顺序重要且需要频繁查找时用 map
  • 避免在 vector 中间插入,除非数据量小
    STL的设计遵循以下核心思想:
  1. 泛型编程:通过模板实现
  2. 效率优先:零开销抽象
  3. 互操作性:容器与算法通过迭代器解耦
    掌握STL是高效C++开发的基础,现代C++项目90%的日常数据结构需求都可通过STL满足。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

code .

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

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

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

打赏作者

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

抵扣说明:

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

余额充值