【C++】标准模板库 STL 简介


  • 🧑‍🎓个人主页:简 料

  • 🏆所属专栏:C++

  • 🏆个人社区:越努力越幸运社区

  • 🏆简 介:简料简料,简单有料~在校大学生一枚,专注C/C++/GO的干货分享,立志成为您的好帮手 ~


C/C++学习路线 (点击解锁)
❤️C语言
❤️初阶数据结构与算法
❤️C++
❤️高阶数据结构
❤️Linux系统编程与网络编程

文章目录


🏆前言

🌀 STL是C++标准库的一部分,它在C++程序中扮演着重要的角色。它使用模板(template)来实现各种数据结构,包括序列容器、关联容器、无序容器等,并提供相应的迭代器、算法、适配器、仿函数等部件。这些部件可以用来实现各种复杂的数据结构和算法,从而大大简化了程序员的编程工作。
🌀 在C++中,stl的位置非常核心,它几乎渗透在C++程序的角角落落里。无论是开发底层系统,还是开发上层应用,stl都扮演着不可或缺的角色。它不仅提供了高效的数据结构和算法,还提供了一种标准化的编程模式,使得程序具有良好的可读性、可维护性和可重用性。
🌀 总之,stl在C++中的位置非常重要,它是C++标准库的核心组成部分,为程序员提供了强大的工具和资源,帮助程序员编写高质量、高效率的程序。


本章将带你快速了解STL,接下来就来认识认识一下STL吧~


🧑‍🎓什么是STL

前言部分大致说的差不多了,这里就不多说了~

STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。


🧑‍🎓STL的版本

  • 原始版本
    Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版本,本着开源精神,他们声明允许任何人任意运用、拷贝、修改、传播、商业使用这些代码,无需付费。唯一的条件就是也需要向原始版本一样做开源使用。 HP 版本--所有STL实现版本的始祖。
  • P. J. 版本
    由P. J. Plauger开发,继承自HP版本,被Windows Visual C++采用,不能公开或修改,缺陷:可读性比较低,符号命名比较怪异。
  • RW版本
    由Rouge Wage公司开发,继承自HP版本,被C+ + Builder 采用,不能公开或修改,可读性一般。
  • SGI版本
    由Silicon Graphics Computer Systems,Inc公司开发,继承自HP版 本。被GCC(Linux)采用,可移植性好,可公开、修改甚至贩卖,从命名风格和编程 风格上看,阅读性非常高。我们后面学习STL要阅读部分源代码,主要参考的就是这个版本。

🧑‍🎓STL的六大组件

  • STL的六大组件分别是:
  1. 容器(containers):如vector、list、deque、set、map等,用来存放数据。从实现的角度看,stl容器是一种类模板。
  2. 算法(algorithms):如sort、search、copy、erase等。从实现的角度看,stl算法是一种函数模板。
  3. 迭代器(iterators):扮演容器与算法之间的胶合剂,是所谓的"泛型指针"。从实现的角度看,迭代器是一种将operator*、operator->、operator++、operator--等指针相关操作予以重载的类模板。
  4. 仿函数(functors):行为类似函数,可以作为算法的某种策略。仿函数是一种重载了operator()的类或类模板。
  5. 适配器(adapters):一种用来修饰容器、仿函数、迭代器接口的东西。
  6. 配置器(allocators):负责空间配置与管理。
  • 这六大组件可以彼此组合套用,以实现更复杂的功能。

🧑‍🎓STL的重要性

  • 在笔试中:会有几道算法题,这时候,使用C++的小伙伴就不得不使用STL来提高效率了~
  • 在面试中:面试官经常会问到关于STL的知识,所以熟练STL的小伙伴可是加分项噢~
  • 在工作中:网上有句话说:"不懂STL,不要说你会C++"。STL是C++中的优秀作品,有了它的陪伴,许多底层的数据结构以及算法都不需要自己重新造轮子,站在前人的肩膀上,健步如飞的快速开发。

🧑‍🎓如何学习STL

摘:

简单总结一下:学习STL的三个境界:能用,明理,能扩展 。


🧑‍🎓STL的缺陷

  1. STL库的更新太慢了。这个得严重吐槽,上一版靠谱是C++98,中间的C++03基本一些修订。C++11出来已经相隔了13年,STL才进一步更新。
  2. STL现在都没有支持线程安全。并发环境下需要我们自己加锁。且锁的粒度是比较大的。
  3. STL极度的追求效率,导致内部比较复杂。比如类型萃取,迭代器萃取。
  4. STL的使用会有代码膨胀的问题,比如使用vector/vector/vector这样会生成多份代码,当然这是模板语法本身导致的。

🏆写在最后

💝本章主要是给大家介绍C++当中的标准模板库(STL),只要你用C++,那必然脱离不了STL的存在,他的重要性是毋庸置疑的。最后用上文的一段文字来结尾:网上有句话说:"不懂STL,不要说你会C++"。STLC++中的优秀作品,有了它的陪伴,许多底层的数据结构以及算法都不需要自己重新造轮子,站在前人的肩膀上,健步如飞的快速开发。😊


❤️‍🔥后续将会继续输出有关C++的文章,你们的支持就是我写作的最大动力!

感谢阅读本小白的博客,错误的地方请严厉指出噢~

相关推荐
Algorithm15765 分钟前
云原生相关的 Go 语言工程师技术路线(含博客网址导航)
开发语言·云原生·golang
shinelord明14 分钟前
【再谈设计模式】享元模式~对象共享的优化妙手
开发语言·数据结构·算法·设计模式·软件工程
Monly2121 分钟前
Java(若依):修改Tomcat的版本
java·开发语言·tomcat
boligongzhu22 分钟前
DALSA工业相机SDK二次开发(图像采集及保存)C#版
开发语言·c#·dalsa
Eric.Lee202122 分钟前
moviepy将图片序列制作成视频并加载字幕 - python 实现
开发语言·python·音视频·moviepy·字幕视频合成·图像制作为视频
小俊俊的博客23 分钟前
海康RGBD相机使用C++和Opencv采集图像记录
c++·opencv·海康·rgbd相机
7yewh25 分钟前
嵌入式Linux QT+OpenCV基于人脸识别的考勤系统 项目
linux·开发语言·arm开发·驱动开发·qt·opencv·嵌入式linux
waicsdn_haha36 分钟前
Java/JDK下载、安装及环境配置超详细教程【Windows10、macOS和Linux图文详解】
java·运维·服务器·开发语言·windows·后端·jdk
_WndProc38 分钟前
C++ 日志输出
开发语言·c++·算法
薄荷故人_39 分钟前
从零开始的C++之旅——红黑树及其实现
数据结构·c++