当前位置: 首页 > news >正文

【c++】 STL的组件简介与容器的使用时机

STL六大组件简介

STL提供了六大组件,彼此之间可以组合套用,这六大组件分别是:容器算法迭代器仿函数适配器(配接器)空间配置器

  • 容器:各种数据结构,如vector、list、deque、set、map等,用来存放数据,从实现角度来看,STL容器是一种class template。
  • 算法:各种常用的算法,如sort、find、copy、for_each。从实现的角度来看,STL算法是一种function tempalte.
  • 迭代器:扮演了容器与算法之间的胶合剂,共有五种类型,从实现角度来看,迭代器是一种将operator* , operator-> , operator++,operator–等指针相关操作予以重载的class template. 所有STL容器都附带有自己专属的迭代器,只有容器的设计者才知道如何遍历自己的元素。原生指针(native pointer)也是一种迭代器。
  • 仿函数:行为类似函数,可作为算法的某种策略。从实现角度来看,仿函数是一种重载了operator()的class 或者class template
  • 适配器:一种用来修饰容器或者仿函数或迭代器接口的东西。
  • 空间配置器:负责空间的配置与管理。从实现角度看,配置器是一个实现了动态空间配置、空间管理、空间释放的class tempalte.
  • STL六大组件的交互关系,容器通过空间配置器取得数据存储空间,算法通过迭代器存储容器中的内容,仿函数可以协助算法完成不同的策略的变化,适配器可以修饰仿函数。

STL的优点:

  • STL 是 C++的一部分,因此不用额外安装什么,它被内建在你的编译器之内。
  • STL 的一个重要特性是将数据和操作分离。数据由容器类别加以管理,操作则由可定制的算法定义。迭代器在两者之间充当“粘合剂”,以使算法可以和容器交互运作
  • 程序员可以不用思考 STL 具体的实现过程,只要能够熟练使用 STL 就 OK 了。这样他们就可以把精力放在程序开发的别的方面。
  • STL 具有高可重用性,高性能,高移植性,跨平台的优点。
  • 高可重用性:STL 中几乎所有的代码都采用了模板类和模版函数的方式实现,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。
  • 高性能:如 map 可以高效地从十万条记录里面查找出指定的记录,因为 map 是采用红黑树的变体实现的。
  • 高移植性:如在项目 A 上用 STL 编写的模块,可以直接移植到项目 B 上。

三、STL容器使用时机

四、STL容器的基本操作与接口 

string容器的基本操作与接口 

vector容器的操作与接口

deque容器的基本操作与接口

stact&queue栈和队列的基本操作与接口

list容器的基本操作与接口

仿函数的概念详解与基础实现​​​​​​​

相关文章:

  • 使用腾讯云快速搭建WordPress网站流程详解
  • 什么是margin重叠问题?如何解决?
  • 09 Qt扩展LineEdit组件:Input输入框
  • icon格式软解码
  • 使用Homebrew搭建java环境
  • 基于PyTorch深度学习实战入门系列-(2)Numpy基础上
  • 定时执行专家V7.1 多国语言版本日文版发布 - タスク自動実行ツールV7.1 日本語版リリース
  • 通过iframe下载文件,怎么判断文件是否下载成功?
  • Linux minfo命令教程:详解MS-DOS文件系统参数查看命令(附实例详解和注意事项)
  • 阿里云k8s环境下,因slb限额导致的发布事故
  • 云服务器操作系统如果不小心被删除了文件,那岂不是不能进系统了?
  • Spring Boot启动流程详解
  • Java后端 - 一面凉经 - 得物(国际电商)
  • 安装sqlserver2022最新版只能使用.\SQLEXPRESS登录数据库怎么修改成.
  • Java实战:Spring Boot整合Canal与RabbitMQ实时监听数据库变更并高效处理
  • 时间复杂度分析经典问题——最大子序列和
  • __proto__ 和 prototype的关系
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • Android 控件背景颜色处理
  • android 一些 utils
  • Babel配置的不完全指南
  • eclipse(luna)创建web工程
  • flask接收请求并推入栈
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • tensorflow学习笔记3——MNIST应用篇
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • Unix命令
  • 浮现式设计
  • 基于axios的vue插件,让http请求更简单
  • 开源地图数据可视化库——mapnik
  • 来,膜拜下android roadmap,强大的执行力
  • 让你的分享飞起来——极光推出社会化分享组件
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 思维导图—你不知道的JavaScript中卷
  • 我与Jetbrains的这些年
  • 线性表及其算法(java实现)
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • postgresql行列转换函数
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • #define
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转)http协议
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)LINQ之路
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .Net Core缓存组件(MemoryCache)源码解析
  • .pyc文件是什么?
  • [ 隧道技术 ] 反弹shell的集中常见方式(四)python反弹shell
  • []我的函数库