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

【C++】STL简介

文章目录

      • 什么是STL
      • STL版本
        •  原始版本(HP版本)
        •  P.J.版本
        •  RW版本
        •  SGI版本
      • STL六大组件
        •  容器
        •  算法
        •  仿函数
        •  空间配置器
        •  迭代器
        •  配接器
      • STL缺陷

什么是STL

  STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,还是一个包罗数据结构与算法的软件框架。
  俗话说的好,不懂STL,不要说你会C++。C++中拥有许多底层的数据结构以及算法,有了STL就不需要自己造轮子了,不得不承认我们大多数人都喜欢自己造轮子,总觉得自己造的轮子会与众不同,实际上可能还比不上别人提供的轮子。

STL版本

 原始版本(HP版本)

  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六大组件

 容器

  名字非常高大上,实际上就是数据结构,比如:string、vector、list、deque、map等。

 算法

  常见的有find、swap、reverse、sort、merge等。

 仿函数

  greater、less……

 空间配置器

  一些频繁需要访问内存空间的容器由空间配置器在内存池上分配内存,内存池的内存也是来源于堆上的。

 迭代器

  iterator、const_iterator、reverse_iterator、const_reverse_iterator。

 配接器

  stack、queue、priority_queue。

STL缺陷

  1. STL库的更新很慢;
  2. STL没有支持线程安全,并发环境下需要自己加锁。且锁的粒度是比较大的;
  3. STL极度的追求效率,导致内部比较复杂;
  4. STL的使用会有代码膨胀的问题,这是模板语法本身导致的。
http://www.lryc.cn/news/39507.html

相关文章:

  • (小甲鱼python)文件永久存储(上)总结 python文件永久存储(创建打开文件、文件对象的各种方法及含义)
  • 甲酸溶液除钠离子,丙酸溶液除钾离子,医药液体除钾
  • 操作系统(2.2)--进程的描述与控制
  • Python连接es笔记四之创建和删除操作
  • 字符串填充到指定长度
  • macOS虚拟机安装全过程(VMware)
  • 第十三届蓝桥杯A组:选数异或——三种解法(线段树、DP、ST表)
  • 【CTF】CTF竞赛介绍以及刷题网址
  • Springboot怎么优雅实现大文件的上传
  • 2月编程语言排行榜新鲜出炉,谁又摘得桂冠?
  • 机器学习中的数学原理——模型评估与交叉验证
  • JAVA开发(JSP的9大内置对象和4大作用域)
  • (4)EKF失控保护
  • 数论----质数的求解(C/C++)
  • 【电赛MSP430系列】GPIO、LED、按键、时钟、中断、串口、定时器、PWM、ADC
  • 【Linux】进程理解与学习(Ⅱ)
  • vscode 爽到起飞的快捷键
  • vs +qt 打包.cpp和.h为DLL文件
  • echarts有滑块
  • MATLAB绘制ROC曲线
  • ChatGPT前传
  • 我的十年编程路 2020年篇
  • 力扣-SQL【入门】
  • Vue中组件到底是什么
  • 不同时间间隔数据对统计结果的影响
  • hudi系列-数据写入方式及使用场景
  • C # FileStream文件流
  • Go语言中的保留字和运算符详解
  • Linux编译之(1)C语言基础
  • CPU平均负载高问题定位分析