当前位置: 首页 > ds >正文

c++:标准模板库 STL(Standard Template Library)

目录

🧱 一、什么是 STL?

🌲 二、STL 三大核心组成

📦 三、容器(Containers)

🔹 1. 顺序容器(Sequential Containers)

🔹 2. 关联容器(Associative Containers)— 基于红黑树

🔹 3. 无序容器(Unordered Containers)— 基于哈希表

⚙️ 四、算法(Algorithms)

🔁 五、迭代器(Iterators)

🛠️ 六、STL 配合泛型编程的威力

🧩 七、STL 使用图解结构


🧱 一、什么是 STL?

定义:

STL(Standard Template Library) 是 C++ 标准库的一部分,它是一套使用模板技术实现的通用 数据结构和算法库。

可以理解为:

“一个高度模块化、高性能、高度泛型的编程工具箱。”

它实现了大量经典数据结构(如:数组、链表、栈、队列、哈希表、平衡树等)和常用算法(如:排序、查找、复制、替换等)。

 

🌲 二、STL 三大核心组成

STL 是由三大部分构成的:

组件作用举例
容器(Containers)用来存放数据vector, list, map
算法(Algorithms)操作容器里的数据sort, find, count
迭代器(Iterators)用来遍历容器it = v.begin(); ++it

👉 这三者可以组合使用,例如对 vector 排序就用:std::sort(v.begin(), v.end());

 


📦 三、容器(Containers)

容器是用来装数据的,就像一个个不同的容器:桶、箱子、抽屉……

STL 容器分为几类:

🔹 1. 顺序容器(Sequential Containers)

容器特点适用场景
vector动态数组最常用,支持随机访问
list双向链表插入/删除快,但不能随机访问
deque双端队列两端插入删除都快
array固定长度数组(C++11)更安全的静态数组

🔹 2. 关联容器(Associative Containers)— 基于红黑树

容器特点
set只存 key,自动排序
map键值对,自动排序
multiset / multimap允许重复 key

🔹 3. 无序容器(Unordered Containers)— 基于哈希表

容器特点
unordered_set哈希集合,查找快,不排序
unordered_map哈希表,键值对查找快
unordered_multimap哈希多键

 


⚙️ 四、算法(Algorithms)

STL 提供了 70 多个算法,可以对容器中的数据进行操作:

常用算法分类:

类型代表函数说明
排序类sort, stable_sort快速排序
查找类find, binary_search顺序查找 / 二分查找
修改类reverse, replace, fill数据修改
统计类count, accumulate个数、和等
变换类transform, copy, remove_if创建新数据

示例:

std::vector<int> v = {1, 5, 2, 4};
std::sort(v.begin(), v.end());  // 排序
std::reverse(v.begin(), v.end());  // 逆序
int sum = std::accumulate(v.begin(), v.end(), 0); // 求和

 


🔁 五、迭代器(Iterators)

迭代器就像指针,用来访问容器的元素。

常见类型:

类型用法
begin() / end()遍历容器开头到结尾
rbegin() / rend()反向遍历
const_iterator只读迭代器
auto自动类型推导(推荐)
std::vector<int> v = {1, 2, 3};
for (std::vector<int>::iterator it = v.begin(); it != v.end(); ++it) {std::cout << *it << " ";
}

 或者使用现代写法:

for (auto x : v) {std::cout << x << " ";
}

🛠️ 六、STL 配合泛型编程的威力

STL 之所以强大,是因为它用的是 模板(template)技术,容器和算法都可以作用于任何类型的数据。

比如:

std::vector<std::string> names;
std::map<int, std::vector<double>> data;

🧩 七、STL 使用图解结构

           +-----------------------+|     STL 总结构        |+-----------------------+/        |       \/         |        \容器 (vector/map)  算法 (sort/find)   迭代器 (*it)

容器储存数据 ➜ 算法操作数据 ➜ 迭代器在二者之间做“桥梁”

http://www.xdnf.cn/news/5212.html

相关文章:

  • 【Go底层】http标准库服务端实现原理
  • 设计模式-迭代器模式
  • 【MySQL数据库】--SQLyog创建数据库+python连接
  • 26考研——中央处理器_CPU 的功能和基本结构(5)
  • 机器学习-数据集划分和特征工程
  • Rust 中的 `PartialEq` 和 `Eq`:深入解析与应用
  • 数据库审计如何维护数据完整性:7 种工具和技术
  • 解决Win11下MySQL服务无法开机自启动问题
  • 数巅智能携手北京昇腾创新中心深耕行业大模型应用
  • 卷积神经网络实战(4)代码详解
  • 第二章 如何安装KEIL5和新建工程
  • 【论文解读】| ACL2024 | LANDeRMT:基于语言感知神经元路由的大模型机器翻译微调框架
  • 2025年数维杯C题完整求解思路讲解+代码分享
  • AI星智协脑:智能驱动的高效协作管理平台全解读
  • QT聊天项目DAY10
  • GoWeb开发(基础)
  • web 自动化之 selenium 元素四大操作三大切换等待
  • CSS transition过渡属性
  • NXP iMX8MP ARM 平台多屏幕克隆显示测试
  • 辛格迪客户案例 | 天台山制药仓储管理系统(WMS)项目
  • 普通IT的股票交易成长史--20250509晚复盘
  • 读写锁简介
  • Java——反射
  • DeepSeek致谢腾讯!
  • 热蛋白质组分析(TPP)技术的优劣势探讨
  • EPS三维测图软件
  • CDGP重点知识梳理(82个)
  • 20250509 相对论中的\*\*“无空间”并非真实意义上的虚无,而是时空结构尚未形成\*\*的状态。 仔细解释下这个
  • (undone) MIT6.S081 Lec17 VM for APP 学习笔记
  • LeetCode面试题 17.21 直方图的水量