STL简介与类模板,函数模板的联系,迭代器的引入与初步简单认识

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

什么是STL

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

STL的版本

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

STL的六大组件与类模板函数模板

在这里插入图片描述

  1. STL的六大组件当中有一个就是容器也就是数据结构这些数据结构都是以类的方式去进行刻画所以本质上相当于是一个又一个的类。对于很多数据结构而言需要适配存储各种数据类型。这样势必会延伸出类模板
  2. STL六大组件当中还有一个是算法这些算法函数都必须得保持它的通用性因为我在实际代码当中随时随地都需要进行各种各样的调用以最简单的swap函数为例为了保证他的使用的通用性势必会衍生出函数模板在这里插入图片描述

迭代器的引入

  1. 对于STL组件当中的容器能不能用一种统一的方式访问遍历与修改容器当中的数据
  2. 对于STL组件当中的算法由于这些算法肯定需要去处理容器中的数据但是我这个算法又需要保持通用性因此能不能用一种统一的方式去访问遍历与修改容器当中的数据并且容器当中的数据大部分都是私有的想要在算法当中使用操作这些数据又该怎么破除这个私有限制呢
  3. 伴随着这些疑问迭代器出现了…
    在这里插入图片描述

迭代器的简单介绍不要求深入大概了解

  1. 迭代器Iterator可以被视为一种新的数据类型它是C++ STL标准模板库中重要的组成部分之一。
  2. 迭代器里面分为很多种比方说iteratorconst_iteratorreverse_iteratorreverse_const_iterator等等前两个都是正向迭代器后两个是反向迭代器
  3. 迭代器用于实现对容器如数组、列表等中元素的遍历和访问。通过迭代器可以像访问普通指针一样访问容器中的元素但是它提供了更丰富的功能如随机访问、反向访问等并且可以与算法如查找、排序等配合使用能够大大简化编写代码的复杂度。因此迭代器在C++中被广泛应用。
  4. 迭代器Iterator和指针Pointer非常类似。它们都可以用来遍历和访问内存中的数据都可以通过解引用操作符*访问所指向的数据对象。**此外迭代器还有自增++和自减–等运算符这些运算符在指针中也是有效的。**不过迭代器和指针也有一些本质的区别。
  5. 目前的话就可以把迭代器理解成像指针一样的东西但它实际上不一定是指针有可能是指针有可能也不是指针。他在用法上面完全模拟了指针可以进行解引用++与–等。

迭代器与范围for语法糖

  1. 实际上我们之前讲的那个范围for其实数组可以用它容器也可以用它。
  2. 如果你想要通过范围for进行数据的修改的话注意要加上引用。在这里插入图片描述
  3. 但实际上范围for在底层就是转换为迭代器它的本质就是迭代器其实也根本就没有什么范围for都是替换为为迭代器的
  4. 所以如果说一个类不支持迭代器那么他肯定也不支持范围for否则反之。

迭代器实现正向遍历

在这里插入图片描述

迭代器实现反向遍历

在这里插入图片描述

普通迭代器与const迭代器的权限问题

  1. 首先是否被const修饰就决定了两者权限的大小问题。
  2. 这个地球人都知道如果没有被const修饰相当于是一个普通的迭代器那么他可读可写如果被const修饰那么此时它的权限就是只读。
  3. 在进行赋值与传参的时候权限能够平移与缩小而不能够进行权限的放大

在这里插入图片描述
在这里插入图片描述

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

“STL简介与类模板,函数模板的联系,迭代器的引入与初步简单认识” 的相关文章