STL 初识笔记
1.1 STL 的诞生
-
背景:C++ 早期缺乏标准化的数据结构和算法库,开发者需要重复实现基础功能。
-
目标:通过模板技术实现泛型编程,提高代码复用性和开发效率。
-
贡献者:由 Alexander Stepanov 提出并推动成为 C++ 标准的一部分(1994 年正式纳入)。
1.2 STL 基本概念
-
核心思想:
-
容器:存储数据的模板类(如
vector
,list
,map
)。 -
算法:操作数据的模板函数(如
sort
,find
,copy
)。 -
迭代器:连接容器和算法的“泛型指针”。
-
-
特点:三者通过模板解耦,实现高度可复用性。
1.3 STL 六大组件
容器(Containers):管理数据的集合(顺序容器、关联容器)。
算法(Algorithms):对数据进行操作(排序、查找等)。
迭代器(Iterators):提供访问容器元素的统一接口。
仿函数(Functors):行为类似函数的对象(如
greater<int>()
)。适配器(Adapters):修饰组件(如
stack
,queue
基于deque
实现)。分配器(Allocators):管理内存分配(通常无需手动操作)。
1.4 容器、算法、迭代器
容器
-
分类:
-
顺序容器:
vector
,list
,deque
-
关联容器:
set
,map
,unordered_set
-
-
特点:通过模板参数指定元素类型(如
vector<int>
)。
算法
-
分类:
-
非修改型:
find
,count
-
修改型:
sort
,reverse
-
-
特点:通过迭代器操作容器,不直接依赖具体容器类型。
迭代器
-
作用:类似指针,用于遍历容器元素。
-
分类:
-
输入迭代器、输出迭代器
-
前向迭代器、双向迭代器、随机访问迭代器
-
1.5 容器算法迭代器初识(示例)
#include <vector>
#include <algorithm>
#include <iostream>
int main() {
// 容器:存储数据
std::vector<int> vec = {3, 1, 4, 1, 5, 9};
// 算法:排序(需随机访问迭代器)
std::sort(vec.begin(), vec.end());
// 迭代器:遍历输出
for (auto it = vec.begin(); it != vec.end(); ++it) {
std::cout << *it << " ";
}
// 输出:1 1 3 4 5 9
return 0;
}
关联知识点
-
模板:STL 的基石,通过模板实现泛型编程。
-
迭代器失效:操作容器时需注意迭代器可能失效的问题(如
vector
插入/删除元素)。 -
性能考量:不同容器和算法的复杂度不同(如
vector
随机访问快,list
插入快)。
✍️ 学习建议:结合代码实践理解各组件的协作,尝试用不同容器和算法实现常见功能(如排序、查找)。