C++ STL 详解:容器、算法与迭代器入门
1. 什么是 STL?为什么需要学会它?
1.1 STL 的定义和历史
STL(Standard Template Library)是 C++ 标准库的一部分,由 Alexander Stepanov 等人设计,于 1998 年纳入 C++ 标准(C++98)。它用模板(一种泛型编程技术)实现,让代码能处理各种数据类型,而不局限于 int 或 string。
简单说,STL 就像一个'乐高积木包':提供容器(存数据)、算法(处理数据)、迭代器(访问数据)等部件。你不用从零写链表或排序函数,直接用 STL 的就行。
1.2 为什么小白要学 STL?
- 效率高:STL 组件经过优化,性能比自己写的代码好(比如 vector 比数组更灵活)。
- 避免 bug:STL 处理了内存管理、边界检查等细节,你少犯错。
- 代码简洁:一行 STL 代码能顶你写几十行。
- 就业必备:面试题常考 STL(如 LeetCode 的数组/链表问题)。大项目(如游戏引擎、浏览器)都用 STL。
- 解决问题:小白常遇'怎么存一堆数据?''怎么排序?'STL 直接解决。
不学 STL,你就是在'重新发明轮子'——费时费力。学会它,你从'码农'变'工程师'。
提示:STL 不是'高级'东西,从 C++ 入门书第 2 部分就开始教。别怕模板,它只是让 STL 通用而已。
2. STL 的核心组件:四大金刚
STL 有四大主要部分:容器、迭代器、算法、函数对象。我们从小白视角逐一拆解。
2.1 容器(Containers):数据的'存储箱'
容器是 STL 的基石,用于存储和管理数据集合。分为序列容器(有序)和关联容器(基于键值)。
- 常见序列容器:
vector:动态数组,支持随机访问,像可变长数组。适合频繁添加/删除尾部元素。list:双向链表,插入/删除快,但随机访问慢。deque:双端队列,支持两端快速操作。
- 常见关联容器:
map:有序键值对(红黑树实现),键唯一。像字典,自动排序。set:有序唯一元素集合(红黑树),自动去重和排序。unordered_map/unordered_set(C++11):哈希表实现,无序但查找更快。
怎么用?:包含头文件 <vector> 等,然后声明。
示例代码(vector 入门):
#include <iostream>
#include <vector>
int main() {
std::vector<int> numbers;
numbers.();
numbers.();
numbers.();
std::cout << << numbers.() << std::endl;
std::cout << << numbers[] << std::endl;
numbers.();
;
}

