带你一步认识STL

简介: 带你一步认识STL

本节我们将对STL进行初步的认识,为以后对C++的学习打下基础。本篇博客可能略微枯燥,几乎都是文字介绍,友友们做好准备哦,哈哈哈!!!


1.什么是STL

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

2.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要阅读部分源代码,主要参考的就是这个版本。

3.STL的六大组件

STL(标准模板库)的六大组件包括:

1. 容器(Containers):容器是用于存储数据的数据结构,STL 提供了多种容器,如向量(vector)、列表(list)、双端队列(deque)、集合(set)、多重集合(multiset)、映射(map)、多重映射(multimap)、栈(stack)和队列(queue)等。

2. 算法(Algorithms):算法是用于处理容器中数据的函数模板。这些算法包括排序、搜索、复制、删除、合并等操作,它们通常独立于特定的数据类型和容器类型。

3. 迭代器(Iterators):迭代器是类似于指针的对象,用于访问容器中的元素。它们提供了一种方式来遍历容器中的数据,而不需要关心容器的具体类型。

4. 函数对象(Function Objects):也称为仿函数,是行为类似于函数的对象。它们可以在算法中使用,以实现自定义的操作,例如比较、赋值或计算。

5. 适配器(Adapters):适配器是一种机制,用于修改或适配容器、迭代器或函数对象的行为,以适应特定的需求。例如,可以将一个容器适配成一个栈或队列。

6. 分配器(Allocators):分配器是用于管理容器内存分配和释放的对象。它们提供了一种抽象,使得容器可以不依赖于特定的内存模型。

4.STL的重要性

STL(标准模板库)在C++编程中的重要性同样体现在笔试、面试和实际工作中。

4.1笔试中的重要性

1. 知识检验

- 笔试通常包含对C++基础知识的考查,STL作为C++标准库的一部分,是检验候选人是否掌握C++核心概念的重要方面。

- 对STL的理解和使用能力可以直接反映出候选人对C++数据结构和算法的掌握程度。

2. 编程能力

- 笔试题目可能要求使用STL编写代码,以解决特定问题,如使用vector、map、set等数据结构,或者使用排序、查找等算法。

- 熟练使用STL可以在笔试中更快地完成编程题目,提高答题效率。

3. 代码质量

- 使用STL编写的代码往往更加简洁、高效,这可以在笔试中给评卷人留下良好的印象。

4.2 面试中的重要性

1. 技能展示

- 在面试中,候选人可能会被要求解释STL的某些组件或原理,或者现场编写使用STL的代码,这是展示其专业能力的好机会。

- 对STL的深入理解可以证明候选人在C++编程方面具有丰富的经验。

2. 应对问题

- 面试中的编程题或算法题,使用STL可以更快速、更准确地解决问题,显示出良好的问题解决能力。

4.3实际工作中的重要性

1. 提高开发效率

- 在日常工作中,使用STL可以大幅提高代码的开发效率,减少重复劳动,使开发者能够将更多精力投入到业务逻辑的实现上。

2. 保证代码质量

- STL经过广泛测试和优化,使用STL可以减少潜在的错误,提高代码的稳定性和可靠性。

3. 代码维护

- STL的使用使得代码更加标准化,便于其他开发者理解和维护。

5.学习STL

学习STL(标准模板库)理所当然是一个循序渐进的过程。

首先要有扎实的基础,掌握C++基础知识:在学习STL之前,熟练掌握了C++的基本语法、面向对象编程、指针和引用等概念。充分理解泛型编程:STL是基于泛型编程理念的,因此理解模板、泛型算法等概念是学习STL的前提。


其次我们要知道了解STL组件的概念和用途,学会动手实践,针对每个STL组件,编写简单的示例程序进行实践。尝试使用STL解决一些编程问题,如LeetCode、HackerRank等平台上的题目。

如果有余力和时间当然可以进行深入研究,了解不同STL组件的性能特点,如不同容器的插入、删除、查找操作的效率。如果可能,阅读STL的源代码,理解其内部实现机制

重要的是我们学会项目实践,要么借鉴开源,要么自己创建,熟练运用STL。

总之,学习STL是一个由浅入深,持续实践的过程,学会思考,充分交流

目录
相关文章
|
4月前
|
机器学习/深度学习 人工智能 数据库
RAG 2.0 深入解读
本文从RAG 2.0 面临的主要挑战和部分关键技术来展开叙事,还包括了RAG的技术升级和关键技术等。
755 85
|
安全 网络安全 数据安全/隐私保护
CocosCreator 面试题(十四)Cocos Creator WebSocket 、Socket.IO分别是什么?
CocosCreator 面试题(十四)Cocos Creator WebSocket 、Socket.IO分别是什么?
700 0
|
存储 编解码 数据处理
【FFmpeg 视频基本格式】深入理解FFmpeg:从YUV到PCM,解码到编码(三)
【FFmpeg 视频基本格式】深入理解FFmpeg:从YUV到PCM,解码到编码
375 0
|
域名解析 应用服务中间件 nginx
Nginx反向代理实现docker容器域名解析
Nginx反向代理实现docker容器域名解析
2266 0
|
11月前
|
算法 安全 Linux
【C++STL简介】——我与C++的不解之缘(八)
【C++STL简介】——我与C++的不解之缘(八)
|
8月前
|
存储 算法 C++
【C++数据结构——查找】二分查找(头歌实践教学平台习题)【合集】
二分查找的基本思想是:每次比较中间元素与目标元素的大小,如果中间元素等于目标元素,则查找成功;顺序表是线性表的一种存储方式,它用一组地址连续的存储单元依次存储线性表中的数据元素,使得逻辑上相邻的元素在物理存储位置上也相邻。第1次比较:查找范围R[0...10],比较元素R[5]:25。第1次比较:查找范围R[0...10],比较元素R[5]:25。第2次比较:查找范围R[0..4],比较元素R[2]:10。第3次比较:查找范围R[3...4],比较元素R[3]:15。,其中是顺序表中元素的个数。
279 68
【C++数据结构——查找】二分查找(头歌实践教学平台习题)【合集】
|
8月前
|
存储 C语言 C++
【C++数据结构——栈与队列】顺序栈的基本运算(头歌实践教学平台习题)【合集】
本关任务:编写一个程序实现顺序栈的基本运算。开始你的任务吧,祝你成功!​ 相关知识 初始化栈 销毁栈 判断栈是否为空 进栈 出栈 取栈顶元素 1.初始化栈 概念:初始化栈是为栈的使用做准备,包括分配内存空间(如果是动态分配)和设置栈的初始状态。栈有顺序栈和链式栈两种常见形式。对于顺序栈,通常需要定义一个数组来存储栈元素,并设置一个变量来记录栈顶位置;对于链式栈,需要定义节点结构,包含数据域和指针域,同时初始化栈顶指针。 示例(顺序栈): 以下是一个简单的顺序栈初始化示例,假设用C语言实现,栈中存储
322 77
|
7月前
|
NoSQL 算法 安全
Redis原理—1.Redis数据结构
本文介绍了Redis 的主要数据结构及应用。
Redis原理—1.Redis数据结构
|
7月前
|
存储 人工智能 算法
C 408—《数据结构》算法题基础篇—数组(通俗易懂)
408考研——《数据结构》算法题基础篇之数组。(408算法题的入门)
247 23
|
JavaScript 前端开发 编译器
跨越时代的框架对决:深度剖析Vue 2与Vue 3核心差异
跨越时代的框架对决:深度剖析Vue 2与Vue 3核心差异
365 0