STL的基本概念

一、STL的诞生

长久以来,软件界一直希望建立一种可重复利用的东西

C++的面向对象泛型编程思想,目的就是复用性的提升

面向对象的三大特性(简单理解)

封装:把属性和行为抽象出来作为一个整体来实现事和物

继承:子类继承父类,把父类属性和行为全部拿到,不用重新声明

多态:一个函数名称有多个接口,调用不同的接口产生不同的形态

大多情况下,数据结构和算法都未能有一套标准,导致被迫从事大量重复工作

为了建立数据结构和算法的一套标准,诞生了ST L

二、STL基本概念

STL(Standard Template Library,标准模板库)

STL从广义上分为: 容器(container) 、算法(algorithm) 、迭代器(iterator)

容器算法之间通过迭代器进行无缝连接        

STL 几乎所有的代码都采用了模板类或者模板函数

三、 STL六大组件

STL大体分为六大组件,分别是:容器、算法、迭代器、仿函数、适配器(配接器)、空间配置器

1. 容器:各种数据结构,如vector、list、deque、set、map等,用来存放数据

2. 算法:各种常用的算法,如sort、find、copy、for_each等

3. 迭代器:扮演了容器与算法之间的胶合剂

4. 仿函数:行为类似函数,可作为算法的某种策略

5. 适配器:一种用来修饰容器或者仿函数或迭代器接口的东西

6. 空间配置器:负责空间的配置与管理

四、 STL中容器、算法、迭代器

容器:置物之所也

STL容器就是将运用最广泛的一些数据结构实现出来

常用的数据结构:数组, 链表,树, 栈, 队列, 集合, 映射表 等

这些容器分为序列式容器关联式容器两种:

序列式容器:强调值的排序,序列式容器中的每个元素均有固定的位置。

关联式容器:二叉树结构,各元素之间没有严格的物理上的顺序关系

算法:问题之解法也

有限的步骤,解决逻辑或数学上的问题,这一门学科我们叫做算法(Algorithms)

算法分为:质变算法非质变算法

质变算法:是指运算过程中会更改区间内的元素的内容。例如拷贝,替换,删除等等

非质变算法:是指运算过程中不会更改区间内的元素内容,例如查找、计数、遍历、寻找极值等等

迭代器:容器和算法之间粘合剂

提供一种方法,使之能够依序寻访某个容器所含的各个元素,而又无需暴露该容器的内部表示方式。

每个容器都有自己专属的迭代器

迭代器使用非常类似于指针,初学阶段我们可以先理解迭代器为指针

迭代器种类:    

常用的容器中迭代器种类为双向迭代器随机访问迭代器    

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

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

相关文章

Gui guider使用自定义字体总结

在实际开发中,我们通常是使用自定义字体。 在 LVGL 中,用户需要使用自定义的字库,其实现方法可分为两类: ① 通过 C 语言数组(内部读取); ② 通过文件系统读取字库(外部读取&#…

【CAD建模号小技巧】边缘尖角光滑处理方法

教大家一个处理模型边缘的方法,处理后模型更美观,更不易坏,而且有些零件还必须经过这样的处理。 咱们看一个未经过边缘处理的模型,边缘是尖的,摸到会刺伤,一些接近刀口形状。 更危险了,所以要进…

javascript基础代码练习

一、输入新增病例数&#xff0c;累计确诊病例数&#xff0c;14天内聚集性疫情发生天数。新增或者累计确诊病例为0则该地区为低风险地区。新增大于0且累计确诊&#xff1c;50或者累计大于50且14天内聚集性疫情发生天数为0的地区为中风险地区。其他情况为高风险地区。 <!DOCT…

大数据开发(离线实时音乐数仓)

大数据开发&#xff08;离线实时音乐数仓&#xff09; 一、数据库与ER建模1、数据库三范式2、ER实体关系模型 二、数据仓库与维度建模1、数据仓库&#xff08;Data Warehouse、DW、DWH&#xff09;1、关系型数据库很难将这些数据转换成企业真正需要的决策信息&#xff0c;原因如…

C语言程序练习——汉诺塔递归

1. 题目 在终端输入汉诺塔层数n&#xff0c;实现将n层汉诺塔通过三座塔座A、B、C进行排列 2. 代码 #include <stdio.h>int hannuota(int len, int str, int tmp, int dst) {if (1 len){printf("%c -> %c\n", str, dst);}else{hannuota(len-1, str, dst, …

Python更改Word文档的页面大小

页面大小确定文档中每个页面的尺寸和布局。在某些情况下&#xff0c;您可能需要自定义页面大小以满足特定要求。在这种情况下&#xff0c;Python可以帮助您。通过利用Python&#xff0c;您可以自动化更改Word文档中页面大小的过程&#xff0c;节省时间和精力。本文将介绍如何使…

Python---Numpy学习

首先&#xff0c;先来认识一下Numpy数组对象&#xff0c;以及如何创建它 import numpy as np# 1.认识数组对象 # 指定取值范围和跨度创建数组对象 # 创建一个3行4列的数组 data np.arange(12).reshape(3, 4)print(data)print(type(data))# 维度 print(data.shape)# 维度的个数…

【Java程序设计】【C00364】基于Springboot的美发管理系统(有论文)

基于Springboot的美发管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 项目获取 &#x1f345;文末点击卡片获取源码&#x1f345; 开发环境 运行环境&#xff1a;推荐jdk1.8&#xff1b; 开发工具&#xff1a;eclipse以及idea&…

「媒体宣传」如何针对不同行业制定媒体邀约方案

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 针对不同行业制定媒体邀约方案时&#xff0c;需要考虑行业特点、目标受众、媒体偏好以及市场趋势等因素。 一、懂行业 先弄清楚你的行业是啥样&#xff0c;有啥特别之处。 了解行业的热…

鸿蒙OS应用示例:【数字滚动计时】

实现效果&#xff1a; 代码示例&#xff1a; RollingText.ets 组件封装 RollingText.ets 组件封装 /*** 滚动文字特效*/ Component export default struct RollingText {private num:numberprivate timerId: number -1State counter: number 0aboutToAppear() {this.timerId…

深度学习知识【CSPNet网络详解】

CSPNet的贡献 1.增强了CNN的学习能力&#xff0c;能够在轻量化的同时保持准确性。 2.降低计算瓶颈。 3.降低内存成本。 CSPNet介绍 在神经网络推理过程中计算量过高的问题是由于网络优化中的梯度信息重复导致的。CSPNet通过将梯度的变化从头到尾地集成到特征图中&#xff0c…

练习使用动态内存相关的4个函数:malloc、calloc、realloc、free

在了解使用动态内存相关的四个函数之前&#xff0c;我们先了解一下&#xff0c;为什么要有动态内存分配&#xff1f; 首先&#xff0c;我们已经掌握了一种开辟内存的方式&#xff0c;就是直接使用int i20;但是这样开辟空间有两个特点&#xff0c;1&#xff1a;空间开辟大小是固…