基础算法

 

快速排序

高精度

前缀和

一维前缀和

二维前缀和

双指针

位运算

离散化

区间合并

 

 

 

数据结构

Trie树

Hash表

存储结构

字符串哈希方式

STL

一、STL 的核心组成

STL是 C++ 标准库的一部分,主要包括以下四大组件:

  1. 容器(Containers)

    • 存储元素的 data structures。

    • 常用容器:vector, list, set, map, unordered_map, deque, stack, queue 等。

  2. 算法(Algorithms)

    • 在容器上执行操作的函数模板,如排序、查找、遍历等。

    • 常用算法:sort(), find(), count(), lower_bound() 等。

  3. 迭代器(Iterators)

    • 用于遍历容器中元素的指针抽象,类似指针但更通用。

    • 分类:输入迭代器、输出迭代器、前向迭代器、双向迭代器、随机访问迭代器。

  4. 函数对象(Functors)

    • 可重用的函数封装,可作为算法的参数传递。

    • 常用函数对象:greater<int>(), less_equal<T>(),或通过 lambda 表达式实现。


二、容器详解

1. 线性容器(Linear Containers)

(1) vector

(2) list

(3) deque

2. 关联容器(Associative Containers)

(1) set

(2) map

(3) unordered_set/unordered_map


三、算法详解

1. 常用算法

(1) 排序

(2) 查找

(3) 遍历


四、迭代器使用

1. 遍历容器

2. 反向迭代器


五、函数对象与Lambda表达式

1. 函数对象

2. Lambda表达式


六、STL内存管理

1. allocator


七、STL实际开发技巧

  1. auto 关键字

  2. 范围 for 循环

  3. 移动语义


八、常见问题

  1. vector 和 list 的区别?

    • vector:动态数组,支持随机访问,尾部插入删除快,中间慢。

    • list:双向链表,中间插入删除快,不支持随机访问。

  2. 为什么用迭代器而不是指针?

    • 迭代器抽象了容器的访问方式,兼容不同容器(如 vectorlist)。

  3. 容器是否线程安全?

    • 不安全,多线程环境下需手动加锁保护共享数据。

九、容器详细介绍

一、线性容器(Linear Containers)

1. vector

2. list

3. deque


二、关联容器(Associative Containers)

1. set

2. map

3. unordered_set/unordered_map


三、容器适配器(Container Adapters)

1. stack

2. queue

3. priority_queue


四、其他容器

1. multiset/multimap

2. bitset


五、容器选型指南

需求推荐容器原因
快速随机访问vectorO(1) 时间复杂度
频繁中间插入删除listO(1) 时间复杂度
双端操作deque支持前后高效操作
元素唯一且有序set红黑树保证顺序
键值对且有序map基于红黑树的键值对存储
快速哈希查询unordered_set/unordered_map平均 O(1) 时间复杂度
后进先出stack适配器模式简化实现

六、常见陷阱

  1. vector 中间插入删除:时间复杂度为 O(n),避免频繁操作。

  2. unordered_map 的哈希冲突:合理设计哈希函数或使用 std::unordered_map 的默认实现。

  3. set的重复元素set 不允许重复,需用 multiset 存储重复元素。