🐸 青蛙编程网
首页 / C++ / STL / 1. STL 是什么

STL 是什么:标准模板库总览

这是什么:STL(Standard Template Library,标准模板库)——C++ 自带的官方工具箱,容器、算法、迭代器三件套全在里面,写 C++ 十有八九天天在用它。

为什么用:学完 C++ 基础,你已经会写循环、函数和类了。但"会写"和"好写"是两回事——想装一串成绩,难道每次都手写链表?想排序,难道每次都手搓一遍排序算法?不用 STL,这些轮子你得一遍遍重造。

如何用:先看清容器、算法、迭代器怎么分工,再用一个 vector 加 sort 的小程序一次看全三件套。

三件套:容器、算法、迭代器

STL 的核心是三件套,分工明确:

成员 干什么 类比 常见例子
容器(Container) 存数据:动态数组、键值对、集合 保鲜盒 vector、map、set、string
算法(Algorithm) 加工数据:排序、查找、计数 菜谱 sort、find、count
迭代器(Iterator) 在容器里定位,给算法指路 夹子 begin()、end()

一句话串起来:容器装菜,迭代器夹住菜,算法照菜谱加工。三者各管各的、自由组合,所以一套排序算法能给所有容器用。

为什么用 STL:别重复造轮子

自己手写一个链表,插入、删除、内存释放全要操心,一百行下来还可能藏着 bug;用 STL 的现成容器,一行声明搞定,而且经过几十年全球开发者的检验,比手写的稳得多。手写链表是练基本功,实际写项目,先想 STL。

STL 带来的三大好处

  1. 少写代码:自己写动态数组要几十行,vector 一行搞定
  2. 更少 bug:经过全球开发者检验,边界情况(空容器、越界)都考虑过了
  3. 性能更好:STL 容器和算法经过多年优化,内存使用和时间复杂度都很优秀

先睹为快

用 STL 排个序,三件套一次看全:

#include <algorithm>
#include <iostream>
#include <vector>

int main() {
    std::vector<int> scores = {88, 72, 95, 60};  // 容器:装数据
    std::sort(scores.begin(), scores.end());     // 算法:排序

    for (int s : scores) {                       // 迭代器在暗中指路
        std::cout << s << " ";
    }
    std::cout << std::endl;
    return 0;
}

你会看到:

60 72 88 95

begin() 和 end() 就是迭代器——标出"从哪排到哪"的一对夹子。小小三行,容器、算法、迭代器全员到齐。

和 Python 对照

学过 Python 的列表与字典?那 STL 的思路你已经会了一半:

需求 Python C++ STL 头文件
动态数组 list std::vector <vector>
键值对 dict std::map <map>
去重集合 set std::set <set>
字符串 str std::string <string>
排序 sorted() std::sort() <algorithm>
查找 in / .index() std::find() <algorithm>

最大的差别:Python 把这些都内置了,STL 得先 #include 对应头文件,再带上 std:: 前缀。麻烦一点点,换来的是对内存的精打细算。

常用头文件速查

功能 头文件 常见内容
动态数组 <vector> std::vector
键值对 <map> std::map
去重集合 <set> std::set
字符串 <string> std::string
排序/查找 <algorithm> std::sort、std::find
输入输出 <iostream> std::cin、std::cout

记忆口诀

容器装数据,算法来加工,迭代器当桥,三件套齐活。

动手改

  1. 把示例里的成绩换成你最近一次考试的 5 科分数,排序后打印
  2. 删掉 std::sort 那一行再运行,看看输出顺序变成了什么样
  3. 试着改成从大到小:加一行 #include <functional>,把 sort 写成 std::sort(scores.begin(), scores.end(), std::greater<int>())
  4. 把 vector<int> 换成 vector<double>,装入小数成绩再排序

下一章:vector,从最常用的容器开始 🐸

📥 下载本章代码

ZIP 内含本章全部代码文件与说明,解压即用,与教程内容同步生成。