尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
STL 简介:C++ 最强大的标准库
一、什么是 STLSTL 是 C 标准库的核心组成部分它封装了常见的数据结构动态数组、链表、映射、集合等和算法排序、查找、叠加等并且全部通过模板实现与类型无关。你只需要关注“什么数据结构”和“什么算法”而不是“什么类型”。二、STL 的版本STL 经历了多个版本的演变HP 版本Alexander Stepanov 在惠普实验室完成的原始版本所有实现的始祖开源P.J. 版本被 Windows Visual C 采用不能公开修改可读性低RW 版本被 C Builder 采用不能公开修改SGI 版本被 GCC/Linux 采用开源、可移植性好、可读性高是学习源码的主要参考三、STL 的六大组件STL 由六大组件构成它们相互配合构成了一个完整的生态1. 容器Container容器用于存储数据分为序列式容器vector、list、deque、array和关联式容器set、map、multiset、multimap。C11 还增加了无序关联容器unordered_set、unordered_map。示例 1vector 和 list 的基本使用#include iostream#include vector#include listint main() {// vector动态数组强项是随机访问std::vectorint vec {1, 2, 3, 4, 5};vec.push_back(6); // 尾部插入std::cout vec[2] vec[2] \n; // O(1) 随机访问// list双向链表强项是任意位置插入删除std::listint lst {10, 20, 30};lst.push_front(0); // 头部插入也是 O(1)lst.push_back(40); // 尾部插入 O(1)std::cout list front: lst.front() \n;return 0;}2. 算法Algorithm算法处理容器中的数据如排序、查找、统计等。STL 提供了超过 100 种算法全部以模板函数形式存在。示例 2常见 STL 算法#include iostream#include vector#include algorithm#include numericint main() {std::vectorint v {5, 2, 8, 1, 9, 3};// sort排序默认升序std::sort(v.begin(), v.end());// 查找 8auto it std::find(v.begin(), v.end(), 8);if (it ! v.end())std::cout Found: *it \n;// accumulate求和int sum std::accumulate(v.begin(), v.end(), 0);std::cout Sum: sum \n;// 输出排序后的数组for (int x : v) std::cout x ;std::cout \n;return 0;}3. 迭代器Iterator迭代器是容器和算法之间的纽带——它抽象了“指针”的概念让算法可以通用地处理任意容器。在之前学习 C 入门时提到的 auto 关键字最常见的使用场景就是简化迭代器类型的声明。示例 3三种常见迭代器用法#include iostream#include vector#include setint main() {std::vectorint v {10, 20, 30, 40};// 写法 1显式声明迭代器类型太长for (std::vectorint::iterator it v.begin(); it ! v.end(); it)std::cout *it ;std::cout \n;// 写法 2使用 auto 简化推荐for (auto it v.begin(); it ! v.end(); it)std::cout *it ;std::cout \n;// 写法 3范围 for最简洁for (int x : v) std::cout x ;std::cout \n;// set 是自平衡二叉检索树自动排序std::setint s {3, 1, 4, 1, 5, 9};for (auto it s.begin(); it ! s.end(); it)std::cout *it ; // 输出: 1 3 4 5 9std::cout \n;return 0;}4. 仿函数Functor仿函数是重载了 operator() 的类对象可以像函数一样被调用。它常被用于自定义排序规则或算法的行为。示例 4仿函数自定义排序规则#include iostream#include vector#include algorithm// 仿函数降序排序struct Descending {bool operator()(int a, int b) const {return a b;}};int main() {std::vectorint v {5, 2, 8, 1, 9};// 使用仿函数指定排序规则std::sort(v.begin(), v.end(), Descending());for (int x : v) std::cout x ; // 9 8 5 2 1std::cout \n;// 也可以直接使用 STL 提供的仿函数std::sort(v.begin(), v.end(), std::greaterint());return 0;}5. 适配器Adapter适配器用于修改容器或仿函数的接口。stack 和 queue 就是常见的容器适配器——它们的底层由 deque 实现但对外提供了不同的接口。示例 5容器适配器 stack 与 queue#include iostream#include stack#include queueint main() {// stack后进先出底层默认用 dequestd::stackint st;st.push(1); st.push(2); st.push(3);while (!st.empty()) {std::cout st.top() ; // 3 2 1st.pop();}std::cout \n;// queue先进先出std::queueint q;q.push(1); q.push(2); q.push(3);while (!q.empty()) {std::cout q.front() ; // 1 2 3q.pop();}std::cout \n;// priority_queue优先级队列默认大顶堆std::priority_queueint pq;pq.push(3); pq.push(1); pq.push(4);std::cout top pq.top() \n; // 4return 0;}6. 空间配置器Allocator空间配置器负责容器的内存分配与释放。它抽象了“对象构造/析构”与“内存分配/释放”让容器的实现与内存管理解耦。默认使用 allocatorT底层调用 operator new 和 operator delete。总结STL 是 C 语言中最伟大的作品之一它将常见的数据结构和算法封装成通用、高效、类型无关的库。接下来的几篇博客我们将逐一深入学习 vector、list、string 等常见容器的底层原理和实际使用技巧。
RELATED

相关推荐

信贷员不用 AI 审贷,不是不懂,是不敢:FDE 要打通的四个死结

信贷员不用 AI 审贷,不是不懂,是不敢:FDE 要打通的四个死结

摘要 AI 项目落不了地,根源通常不是模型能力,而是四个组织问题:数据归属、权限确认、失败追责、经验沉淀。这四个问题在传统软件里可以绕过,在 AI 里绕不过。 2025年初,一家股份制银行的信贷部门完成了一套AI辅助审贷…

📅 2026/9/27 8:35:29
免费开源小说软件(手机版)

免费开源小说软件(手机版)

本次分享的资源是免费小说软件手机版——阅读3.0📚 一款纯粹、无广告、开源的手机看小说神器。自带海量书源,可以直接搜索全网小说,支持换源、书架管理、本地导入、自定义书单。界面清爽,没有烦人的推送和充值入口,完…

📅 2026/9/21 6:58:32
PHP伪协议安全风险深度解析:从文件读取到代码执行

PHP伪协议安全风险深度解析:从文件读取到代码执行

1. 项目概述:PHP伪协议与安全风险全景 在Web安全领域,PHP伪协议是一个既强大又危险的存在。它像一把瑞士军刀,为开发者提供了灵活的文件处理和数据流操作能力,但同时也为攻击者打开了一扇通往服务器内部的大门。我处理过不少安全事…

📅 2026/9/30 1:04:07
MORE NEWS

更多资讯

📰

AI编码工具大比拼:TaoToken统一API通道下哪款是你的编程加速器?

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

为什么企业做 AI Agent Harness Engineering 必须先做数据治理:TaoToken 统一 Key 通道下的配置骨架与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

Argent 遥测安全与隐私指南:到底收集了什么,如何为整个团队一键关闭

Argent 遥测安全与隐私指南:到底收集了什么,如何为整个团队一键关闭 【免费下载链接】argent An agentic toolkit to control, debug, and profile iOS and Android apps. Made by Software Mansion. 项目地址: https://gitcode.com/gh_mirrors/arg/ar…

📰

3月19日GitHub热门项目推荐|VibeCoding 配 TaoToken:settings.json 骨架与报错排查

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

Anthropic 十大企业插件深度剖析:TaoToken 统一 Key 打通 Claude Cowork 与 MCP 工作流

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

CST电磁仿真零基础入门:从矩形波导到时域求解器的实战路线

先说个现象:每次有年轻人问我CST怎么入门,我第一反应不是甩教程链接,而是先反问一句——你知道你要仿的对象,在物理上到底发生了什么吗?CST这类三维电磁场仿真工具,在高速仿真领域几乎是标配。信号速率上到…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬