C++入门自学Day6-- STL简介(初识)

   往期内容回顾     

            C++模版

            C/C++内存管理(初识)

            C/C++内存管理(续)

STL简介:

          STL 是 C++ 标准库的重要组成部分,是一个通用程序设计的模板库,用于数据结构和算法的复用。它极大地提升了代码效率、可靠性和开发速度。

👉 没有 STL,就好像用 C++ 却放弃了它最强大的部分之一。

        STL 强化了 C++ 的性能和效率优势

  • C++ 被称为“高性能语言”,STL 的底层实现是非常高效的,常使用模板、inline 函数、指针操作等技巧,适合系统底层或对性能敏感的场景。

  • 你用一个 vector<int> 远比你手写动态数组来得安全、高效、可维护。


一、什么是STL

        STL 是一组用模板类和模板函数编写的组件,主要提供:

  • 常用数据结构:如 vector, list, map, set 等。

  • 通用算法:如排序 sort(), 查找 find(), 拷贝 copy() 等。

  • 迭代器机制:提供遍历容器的统一接口。

        特点

  • 支持泛型编程(Generic Programming)

  • 高性能

  • 复用性强

  • 与自定义类型兼容性好(只需提供某些操作符支持)


二、STL的版本

        STL(Standard Template Library)的不同版本主要出现在它从最初提出到最终被标准化的过程中,不同的公司、组织或个人在不同阶段对 STL 进行了实现和扩展。主要有以下几种实现:

实现库

说明

SGI STL

最早由 SGI 实现,是 STL 的奠基者

GNU STL

GCC 标准实现,使用最广泛

MS STL

微软对 STL 的实现,用于 MSVC

LLVM libc++ STL

现代 C++ 的新实现,性能优化好,支持 C++11/14/17/20


三、STL的六大组件

STL 由 六大核心模块组成:

  1. 容器(Containers)

    • 数据结构的集合,如 vector, list, deque, set, map, unordered_map 等。

  2. 算法(Algorithms)

    • 提供各种常见算法,如 sort, find, copy, accumulate, binary_search 等。

  3. 迭代器(Iterators)

    • 提供统一访问容器中元素的接口,是算法和容器之间的桥梁。

  4. 仿函数(Functors)

    • 重载 () 运算符的对象,可作为参数传入算法中进行行为定制。

  5. 适配器(Adapters)

    • 容器适配器:stack, queue, priority_queue

    • 函数适配器:bind, not1, mem_fun(现代 C++ 使用 std::function, lambda)

  6. 空间配置器(Allocators)

    • 管理内存分配和释放(默认是 std::allocator,也可以自定义)


四、STL的重要性

  • 标准化:STL 是 ISO C++ 标准的一部分

  • 高效:基于模板,编译期类型推导,无运行时损耗

  • 通用性:任何类型都能用,只要满足所需操作(如重载 <)

  • 广泛使用:C++ 工程几乎离不开 STL


五、如何学习STL

           1、 掌握 C++ 模板和泛型编程基础

  1. 2、学习常见容器的使用

    • 顺序容器:vector, list, deque

    • 关联容器:map, set, unordered_map, unordered_set

  2. 3、掌握常用算法的使用方法

  3. 4、理解迭代器机制及其分类

              输入/输出迭代器

    • 前向/双向/随机访问迭代器

  4. 5、阅读 STL 源码或其封装

               可以参考 SGI STL 或源码注释版本

    • 使用 STL 编程:建议使用现代 C++(C++11/14/17/20)的标准库。


六、STL有何缺陷

  • 可读性差:大量使用模板,报错复杂

  • 编译速度慢:模板编译时间长

  • 调试困难:模板实例化的错误信息繁琐

  • 不适合所有场景:有些场景需更低层次的控制或自定义优化


七、简单总结一下STL

  • STL 是 C++ 泛型编程的成功应用;

  • 它提供了丰富的数据结构和算法接口;

  • 高效、通用、可靠;

  • 是 C++ 工程开发的基础;

  • 学会 STL 是成为高级 C++ 开发者的必经之路。


 八、STL 与现代互联网技术的联系

 1. 后端工程离不开 STL

  • C++ 仍广泛用于:

    • 1、高频交易系统

    • 2、大型游戏引擎

    • 3、数据库内核

    • 4、图像/音视频处理

    • 5、嵌入式系统、网络设备

这些系统需要高性能 + 安全管理资源,STL 提供了稳定的基础设施。

 2. STL 容器与算法解题能力紧密相关

  • 互联网公司(如字节、腾讯、Google)在面试中常考算法和数据结构,STL 是解题的得力助手:

    • 你可以用 unordered_map 轻松实现哈希表功能。

    • priority_queue 用来实现堆结构。

    • set/multiset 快速查找 & 排序。

👉 STL 是算法工程师 & 后端开发者的利器

 3. 源码工程与代码规范

  • 大型系统开发中,STL 可以让你写出更加 模块化、可维护、跨平台 的代码。

  • 现代 C++(C++11/14/17/20)几乎所有语言特性都和 STL 无缝结合(如:auto, range-based for, lambda, smart_ptr 等)。


为什么要学 STL?

维度

解释

💻 与 C++ 的联系

STL 是 C++ 的标准库核心,体现模板与泛型编程思想

🧠 编程思想

泛型 + RAII + 高性能设计,提升代码复用性和安全性

🌍 互联网实践

面试刷题、后台开发、高性能系统、算法竞赛都用得到

🔧 工程能力

STL 帮你写出更稳健、更模块化、更规范的代码,掌握它是走向大型工程开发的基石

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/91819.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/91819.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从零开始搞定类与对象(中)

运算符重载1.当运算符被用于类类型的对象时&#xff0c;C语言允许我们通过运算符重载的形式指定新的含义。C规定类类型对象使用运算符时&#xff0c;必须转换成调用对应运算符重载&#xff0c;若没有对应的运算符重载&#xff0c;则会编译报错。2. 运算符重载是具有特殊名字的函…

SpringMVC实战指南:从环境搭建到功能实现全解析

第一章&#xff1a;SpringMVC环境搭建与基础配置1.1 Maven依赖配置在Maven项目中&#xff0c;SpringMVC的依赖配置是开发的第一步。根据Spring官方推荐&#xff0c;以下是SpringMVC 5.3.x版本的Maven依赖配置&#xff1a;<dependencies><!-- Spring MVC核心依赖 -->…

Repo 与 manifest

Manifest&#xff1a;它本身就是一个 git 仓库&#xff0c;其中存放的都是包含仓库和子仓库信息的XML文件。这些文件全部由开发者或者维护者手动配置并自己上传到 git 仓库。另外&#xff1a;Manifest 中的仓库之间的依赖关系 repo 也并不关心。所以它们可以是同级的也可以是包…

深入浅出 RabbitMQ:简单队列实战指南

大家好&#xff0c;我是工藤学编程 &#x1f989;一个正在努力学习的小博主&#xff0c;期待你的关注实战代码系列最新文章&#x1f609;C实现图书管理系统&#xff08;Qt C GUI界面版&#xff09;SpringBoot实战系列&#x1f437;【SpringBoot实战系列】SpringBoot3.X 整合 Mi…

Ubuntu22-Qt Creator-fcitx-中文输入

fcitx在ubuntu系统中路径 /usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/ /usr/lib/x86_64-linux-gnu/qt6/plugins/platforminputcontexts/ fcitx-qt5-1.2.7 编译 下载链接:https://github.com/fcitx/fcitx-qt5/archive/refs/tags/1.2.7.zip Qt版本:Qt C…

【Java基础|第十三篇】面向对象基础(三)——继承(一)继承的理解,实现,特点……

&#xff08;四&#xff09;面向对象&#xff1a; 5、继承&#xff1a; &#xff08;1&#xff09;理解&#xff1a; 概念&#xff1a; 继承是面向对象的三大特征之一 继承是类与类之间关系的一种&#xff08;是父类与子类的关系&#xff09; 使用场景&#xff1a; 一个类与另…

QGIS绿色版吉林一号切片体验版插件(Jilin1Tiles)更新

吉林一号更新2024年图源了但吉林一号切片体验版插件&#xff08;Jilin1Tiles&#xff09;还没有更新&#xff0c;我修改了一下代码&#xff0c;直接集成到QGIS绿色版中。如下&#xff1a;注意&#xff1a;第一次使用的时候需要选中启用一下插件&#xff1a;需要使用的可以直接下…

git操作命令和golang编译脚本

git子模块信息处理命令git init submodule git submodule updategit取消合并 git merge --abort git reset --hard HEAD{1}bat文件生成二进制set GOOSlinux set GOARCHamd64 go env -w GOFLAGS-modvendor go build -ldflags "-w -s" -ohallapiset GOOSlinux set GOAR…

通往L4之路:构建自我进化的智能驾驶决策大脑

摘要&#xff1a; 本文旨在提出一个超越当前主流“感知-预测-规划”分离式架构的下一代自动驾驶决策系统方案。面对自动驾驶领域最核心的“长尾场景”难题&#xff0c;本文借鉴并升华了一套源于复杂策略制定的决策智能框架&#xff0c;通过构建动态驾驶世界模型&#xff08;Dyn…

AI编程助手:终结996的新希望

引言程序员工作现状与“996”现象的普遍性AI技术快速发展对编程效率的潜在影响核心问题&#xff1a;AI IDE与AI辅助编程能否改变传统开发模式AI IDE与AI辅助编程的核心技术AI IDE的定义与功能&#xff08;代码补全、错误检测、自动重构等&#xff09;AI辅助编程工具&#xff08…

Anthropic 禁止 OpenAI 访问 Claude API:商业竞争与行业规范的冲突

Anthropic 禁止 OpenAI 访问 Claude API&#xff1a;商业竞争与行业规范的冲突 文章来源&#xff1a;Poixe AI 本周&#xff0c;美国 AI 公司 Anthropic 宣布禁止 OpenAI 通过 API 访问其 Claude 系列大模型。这一举动引发了行业对"友好基准测试"与商业竞争边界的热…

区块链 + 物联网落地案例:供应链溯源系统开发全记录

本文详细记录了区块链与物联网技术融合的供应链溯源系统开发全流程。从项目背景出发&#xff0c;阐述传统供应链溯源痛点&#xff0c;介绍系统开发的技术架构设计&#xff0c;包括物联网数据采集层、区块链数据存储层等核心模块&#xff0c;详解硬件选型、智能合约编写、数据上…

Windows环境下Intel Fortran如何安装配置NetCDF

NetCDF(Network Common Data Form)格式,简称nc格式,是一种自描述、与平台无关的二进制数据文件,特别适合多维数据的存储和交换,广泛应用于气象、海洋、地球科学等领域。本文介绍Windows环境下IntelFortran安装配置NetCDF的过程。 一、系统环境及准备工作 1. 系统 Wind…

tcp/udp的socket特点

tcp &#xff1a; 绑定一个 socket 只是用来监听&#xff0c;accept 对每个客户端生成一个 socket 用来维护滑动窗口等。每个客户端用一个 socket 用来维护滑动窗口等。 4 次挥手对应两次 close 的 fin 和返回的 ack。 而三次挥手在 connect 里阻塞完成。 ​udp &#xff1a; 双…

Linux命令top

top一、 命令二、 如何查看top输出的结果一、 命令 top命令是Linux中的一个实时进程监控工具&#xff0c;类似于windows中的任务管理器。 基本命令 top二、 如何查看top输出的结果 我们需要分析top输出的结果 top输出的结果分为上下两部分&#xff0c;先看上半部分 第一行是…

Perl 数据库连接

Perl 数据库连接 概述 Perl是一种强大的编程语言&#xff0c;广泛应用于文本处理、系统管理、网络编程等领域。随着数据库技术的快速发展&#xff0c;Perl与数据库的结合也日益紧密。本文将详细介绍Perl数据库连接的相关知识&#xff0c;包括常用的数据库类型、连接方法以及一些…

jenkins从入门到精通-P1—九五小庞

1. jenkins的两个核心为CI持续集成 CD持续部署2.jenkins在企业工作中的流程3. 学习的内容包括

第九节 Redis 事务、Redis 脚本

Redis 事务可以一次执行多个命令&#xff0c; 并且带有以下两个重要的保证&#xff1a; 事务是一个单独的隔离操作&#xff1a;事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中&#xff0c;不会被其他客户端发送来的命令请求所打断。事务是一个原子操作&#x…

托福阅读37-2

托福阅读37-2 1.reinforcement from reintroduction定位到倒数第二句&#xff0c;这里我没看懂former和term&#xff0c;直接懵掉了&#xff0c;然后往后看。这句话其实省略了&#xff0c;补充完应该是The former is termed reintroduction and the latter is termed reinforce…

docker-compose一键部署Springboot+Vue前后端分离项目

1. 背景说明 后端使用JDK8&#xff0c;前端为普通Vue项目前端访问后端接口&#xff0c;统一带了前缀/api 2. 项目配置 2.1 后端 yml文件里配置统一访问前缀/api2.2 前端 API路径配置为相对路径&#xff1a;说明&#xff1a;我这边前后端应用都是部署在同一台服务器上&#xff0…