C++之STL简介

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、STL是什么
  • 二、STL的发展历史
  • 三、STL的组成部分
    • 3.1 容器(Containers)
    • 3.2 迭代器(Iterators)
    • 3.3 算法(Algorithms)
    • 3.4 仿函数(Functors)和函数对象(Function Objects)
    • 3.5 适配器(Adapters)
  • 总结


前言

本文主要介绍一下C++中STL的相关概念


一、STL是什么

STL 的全称是 Standard Template Library(标准模板库),它是 C++ 标准库中的一部分,提供了许多通用的模板类和函数,用于实现常用的数据结构和算法。STL 是 C++ 中广泛使用的一个库,被认为是 C++ 的核心之一。

二、STL的发展历史

C++标准模板库(STL)的发展历史可以追溯到20世纪70年代,经过几代学者和工程师的努力,逐步演变成今天的模样。以下是STL发展的主要历程:

1. 早期背景 1970年代 - 1980年代

泛型编程的萌芽:泛型编程的思想可以追溯到1970年代末和1980年代初期。当时的计算机科学家们开始研究如何编写能够处理多种数据类型的通用算法和数据结构。

Ada语言的影响:Ada语言在1983年推出,它是早期尝试泛型编程的语言之一,对C++和STL的发展有一定影响。

2. STL的形成 1990年代初期

Alexander Stepanov的研究:Alexander Stepanov是泛型编程的先驱之一,他在通用算法和数据结构方面做了大量研究。1987年,他在AT&T贝尔实验室开始研究如何将这些概念应用于C++。

与Meng Lee的合作:1992年,Stepanov和Meng Lee在惠普公司(HP Labs)合作,致力于将泛型编程的思想转化为一个实际的库,这就是STL的雏形。

3. 标准化和推广 1993年 - 1994年

STL的首次发布:1994年,Stepanov和Lee正式发布了STL,这一版本迅速引起了C++社区的关注。

纳入标准:同年,STL被提议作为C++标准库的一部分。STL的设计和实现得到了C++标准委员会的认可,并决定将其纳入C++标准。

1998年

C++98标准:STL作为C++98标准的一部分正式发布,成为C++标准库的重要组成部分。这一版本奠定了STL在C++编程中的基础地位。

4. 持续改进和扩展 2000年代

Boost库的影响:Boost库是一个开源的C++库集合,其中包含了许多对STL的扩展和改进,例如智能指针、正则表达式等。这些库为C++标准库的进一步发展提供了很多灵感和实现。

C++11标准:2011年,C++11标准发布,包含了对STL的大量改进和扩展,如新的容器(unordered_map, unordered_set)、新的算法(move, forward)、智能指针(shared_ptr, unique_ptr)和并行算法等。

2017年 - 2020年

C++17标准:2017年,C++17标准发布,进一步增强了STL的功能,引入了文件系统库()、并行STL算法、std::optional、std::variant等新特性。

C++20标准:2020年,C++20标准发布,包含了协程(coroutines)、范围(ranges)库、概念(concepts)等,进一步扩展和增强了STL。

三、STL的组成部分

STL(标准模板库)是C++的一个重要组件,它是由一组通用的模板类和函数组成的,并且提供了一些常用的数据结构和算法,如动态数组(vector)、双端队列(deque)、链表(list)、集合(set)、映射(map)、排序、查找等。STL的设计思想是将数据结构和算法进行分离,使得它们可以独立使用和扩展,提高了代码的复用性和可读性。STL主要包括以下几个组件:

3.1 容器(Containers)

STL提供了多种容器,如动态数组(vector)、双端队列(deque)、列表(list)、集合(set)、映射(map)等。这些容器提供了不同的存储和访问数据的机制。

  1. vector:可以动态调整大小的数组,支持快速的随机访问和迭代器访问,并且支持在尾部添加或删除元素。

  2. deque:双端队列,支持快速的随机访问和迭代器访问,并且支持在头部和尾部添加或删除元素。

  3. list:双向链表,只支持迭代器访问,并且支持在任意位置添加或删除元素。

  4. set:有序集合,其中每个元素都是唯一的,支持快速的查找和插入操作。

  5. map:有序映射,其中每个元素都有一个唯一的键值对,支持快速的查找和插入操作。

  6. unordered_set:无序集合,其中每个元素都是唯一的,支持快速的查找和插入操作,但元素的顺序是未定义的。

  7. unordered_map:无序映射,其中每个元素都有一个唯一的键值对,支持快速的查找和插入操作,但元素的顺序是未定义的。

3.2 迭代器(Iterators)

迭代器是STL中的一个核心概念,它提供了一种访问容器中元素的方法。迭代器类似于指针,但比指针更安全、更灵活。STL中的算法通常通过迭代器来访问和操作容器中的元素。

3.3 算法(Algorithms)

STL提供了大量的算法,用于对容器中的元素进行各种操作,如排序、搜索、计数、拷贝等。这些算法与容器无关,因此可以在不同的容器上使用相同的算法。

3.4 仿函数(Functors)和函数对象(Function Objects)

仿函数和函数对象是C++中一种特殊的类,它们重载了函数调用操作符(),因此可以像函数一样被调用。在STL中,仿函数和函数对象经常用于算法中,以提供自定义的比较、哈希等操作。

3.5 适配器(Adapters)

适配器是一种设计模式,用于将一个类的接口转换为客户端所期望的另一种接口。在STL中,适配器通常用于修改容器的行为或提供额外的功能。

总结

STL的设计理念是泛型编程,通过模板机制,使得相同的算法和数据结构可以应用于不同的数据类型,提供了极大的灵活性和重用性。STL是C++标准库的重要组成部分,极大地提高了C++编程的效率和代码的可维护性。

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

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

相关文章

【启明智显分享】ESP32-S3 4.3寸触摸串口屏HMI应用方案:WIFI/蓝牙无线通信助力烘干设备实现远程遥控

技术不断进步,人们对烘干设备的美观度、功能多样性提出更高要求,传统的数码管显示、按键式控制已经无法满足客户的需求。用智能屏替代传统的数码管可以很好的解决这个问题,为用户带来更好的人机交互体验。 基于此,启明智显提出将乐…

solidity实战练习2--ERC20实现

//SPDX-License-Identifier:MTT pragma solidity ^0.8.24;interface erc20{function name()external view returns (string memory);//查看代币的名称function symbol() external view returns(string memory);//查看代币简称function totalSupply()external view returns(uint…

低代码:架起产教融合的“立交桥”

随着信息技术的飞速发展,传统的软件开发模式正面临着前所未有的挑战。为了应对这一挑战,低代码平台应运而生,其通过简化开发流程、提高开发效率,成为了推动产业与教育深度融合的重要力量。本文将探讨低代码平台如何架起产教融合的…

C++基础(十八):继承(重点)

各位看官,大家好!今天我们将探讨C中的三大特性之一:继承。继承是一种面向对象编程的重要概念,它允许我们通过创建新的类,从而复用和扩展现有类的功能。通过继承,我们不仅能够提高代码的可重用性和可维护性&…

算法刷题笔记 KMP字符串(C++实现,并给出了求next数组的独家简单理解方式)

文章目录 题目描述基本思路实现代码 题目描述 给定一个字符串S,以及一个模式串P,所有字符串中只包含大小写英文字母以及阿拉伯数字。模式串P在字符串S中多次作为子串出现。求出模式串P在字符串S中所有出现的位置的起始下标。 输入格式 第一行输入整数…

docker拉取镜像,报错error pulling image configuration: download failed after attempts=6: dial tcp 157.240.1

error pulling image configuration: download failed after attempts6: dial tcp 157.240.10.32:443: i/o timeout docker compose pull docker pull langgenius/dify-web:0.6.13 重启docker sudo systemctl restart dockerhttps://stackoverflow.com/questions/72353203/do…

9.5 栅格图层符号化多波段彩色渲染

文章目录 前言多波段彩色渲染QGis设置为多波段彩色二次开发代码实现多波段彩色 总结 前言 介绍栅格图层数据渲染之多波段彩色渲染说明:文章中的示例代码均来自开源项目qgis_cpp_api_apps 多波段彩色渲染 以“3420C_2010_327_RGB_LATLNG.tif”数据为例&#xff0c…

代码随想录打卡第二十一天

代码随想录–二叉树部分 day 21 二叉树第八天 文章目录 代码随想录--二叉树部分一、力扣669--修建二叉搜索树二、力扣108--将有序数组转换为二叉搜索树三、力扣538--把二叉搜索树转换为累加树 一、力扣669–修建二叉搜索树 代码随想录题目链接:代码随想录 给你二叉…

常见条件控制算法流程图

内容讲解:流程控制[if…else…(if…elif…else…),while,for] 常见条件控制算法流程图高清图

新手教学系列——高效管理MongoDB数据:批量插入与更新的实战技巧

前言 在日常开发中,MongoDB作为一种灵活高效的NoSQL数据库,深受开发者喜爱。然而,如何高效地进行数据的批量插入和更新,却常常让人头疼。今天,我们将一起探讨如何使用MongoDB的bulk_write方法,简化我们的数据管理流程,让代码更加简洁高效。 常规做法:find、insertone…

Unity 之 抖音小游戏集成排行榜功能详解

Unity 之 抖音小游戏集成排行榜功能详解 一,前言1.1 为游戏设计利于传播的元素​2.2 多人竞技、社交传播​二,集成说明2.1 功能介绍2.2 完整代码2.3 效果展示三,发现的问题和迭代计划一,前言 对于 Unity 开发者而言,在开发抖音小游戏时集成排行榜功能是提升游戏社交性和玩…

Java实战中处理高并发的策略

引言 随着互联网的快速发展,高并发成为了许多应用必须面对的挑战。Java作为一门广泛应用于企业级开发的语言,提供了丰富的工具和技术来应对高并发问题。本文将详细探讨Java中处理高并发的几种常见策略和技术。 1. 并发编程基础 1.1 线程与线程池 Jav…

【TVM 教程】使用 TVM 部署框架预量化模型

本文介绍如何将深度学习框架量化的模型加载到 TVM。预量化模型的导入是 TVM 中支持的量化之一。有关 TVM 中量化的更多信息,参阅 此处。 这里演示了如何加载和运行由 PyTorch、MXNet 和 TFLite 量化的模型。加载后,可以在任何 TVM 支持的硬件上运行编译…

【Linux】常见指令收官权限理解

tar指令 上一篇博客已经介绍了zip/unzip指令,接下来我们来看一下另一个关于压缩和解压的指令:tar指令tar指令:打包/解包,不打开它,直接看内容 关于tar的指令有太多了: tar [-cxtzjvf] 文件与目录 ...…

C++运行时类型识别

目录 C运行时类型识别A.What(什么是运行时类型识别RTTI)B.Why(为什么需要RTTI)C.dynamic_cast运算符Why(dynamic_cast运算符的作用)How(如何使用dynamic_cast运算符) D.typeid运算符…

【Scrapy】 Scrapy 爬虫框架

准我快乐地重饰演某段美丽故事主人 饰演你旧年共寻梦的恋人 再去做没流着情泪的伊人 假装再有从前演过的戏份 重饰演某段美丽故事主人 饰演你旧年共寻梦的恋人 你纵是未明白仍夜深一人 穿起你那无言毛衣当跟你接近 🎵 陈慧娴《傻女》 Scrapy 是…

各地户外分散视频监控点位,如何实现远程集中实时监看?

公司业务涉及视频监控项目承包搭建,此前某个项目需求是为某林业公司提供视频监控解决方案,需要实现各地视频摄像头的集中实时监看,以防止国家储备林的盗砍、盗伐行为。 公司原计划采用运营商专线连接各个视频监控点位,实现远程视…

跟着李沐学AI:线性回归

引入 买房出价需要对房价进行预测。 假设1:影响房价的关键因素是卧室个数、卫生间个数和居住面积,记为x1、x2、x3。 假设2:成交价是关键因素的加权和 。权重和偏差的实际值在后面决定。 拓展至一般线性模型: 给定n维输入&…

MySQL 9.0 正式发行Innovation创新版已支持向量

从 MySQL 8.1 开始,官方启用了新的版本模型:MySQL 创新版 (Innovation) 和长期支持版 (LTS)。 根据介绍,两者的质量都已达到可用于生产环境级别。区别在于: 如果希望尝试最新的功能和改进,并喜欢与最新技术保持同步&am…

怎样在 C 语言中实现栈?

🍅关注博主🎗️ 带你畅游技术世界,不错过每一次成长机会! 📙C 语言百万年薪修炼课程 通俗易懂,深入浅出,匠心打磨,死磕细节,6年迭代,看过的人都说好。 文章目…