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

C++ STL(1)--概述

1. 简述

    STL即标准模板库 Standard Template Library,包含了许多在计算机科学领域里所常用的基本数据结构和算法。STL具有高可重用性、高性能、高可移植性(跨平台)的优点。

    两个特点:

    1.1 数据结构和算法分离。

    1.2 它不是面向对象的,是基于模板(template)的。

2. 六大组件
组件描述例子
容器(Container)各种数据结构,类模板实现array、set、map、vector、list
算法(Algorithm)各种常用的算法,函数模板实现sort、find、copy、for_each
迭代器(Iterator)提供访问容器中对象的方法iterator、const_iterator、reverse_iterator、const_reverse_iterator
仿函数(Functor)使一个类的使用看上去象一个函数。class 或者class template通过重载operator()实现plus<T>、equal_to<T>
适配器(Adaptor)用来修饰容器或者仿函数或迭代器接口
分配器(Allocator)负责空间的配置与管理。是一个实现了动态空间配置、空间管理、空间释放的类模板

        六大组件之间的关系,容器通过分配器取得数据存储空间,算法通过迭代器访问容器中的内容,仿函数可以协助算法完成不同的策略的变化,适配器可以修饰容器(使其表现出另一种行为)。

3. 两种容器

   3.1 序列式容器(Sequence Containers)

         每个元素都有固定位置,如vector、deque、list。

   3.2 关联式容器(Associated Containers)

         元素位置取决于特定的排序准则,和插入顺序无关,如set、multiset、map、multimap

4. 算法

    STL提供了大约100个实现算法的模版函数,后续文章将详细介绍。
    算法主要由三个头文件<algorithm>,<numeric>和<functional>组成。

头文件说明
<algorithm>所有STL头文件中最大的一个,由一大堆模版函数组成的。每个函数在很大程度上都是独立的,其中常用到的功能范围涉及到比较、交换、查找、遍历操作、复制、修改、移除、反转、排序、合并等等。
<numeric>体积很小,只包括几个在序列上面进行简单数学运算的模板函数,包括加法和乘法在序列上的一些操作。
<functional>定义了一些模板类,用以声明函数对象。
5. 迭代器

    容器提供迭代器,算法使用迭代器。Iterator通过运用聚合对象的模式,使得可以在不知道对象

    内部表示的情况下,按照一定顺序(由iterator提供的方法)访问聚合对象中的各个元素。

    作用:迭代器与算法可以互不干扰地发展,最后又能一起无缝粘合地使用。

6. 仿函数

    可以自定义仿函数,也可以使用STL内建的仿函数(必须包含<functional>头文件)。

    而STL内建的仿函数包括三种:

分类
算术类加:plus<T>
减:minus<T>
乘:multiplies<T>
除:divides<T>
模取:modulus<T>
否定:negate<T>
关系运算类等于:equal_to<T>
不等于:not_equal_to<T>
大于:greater<T>
大于等于:greater_equal<T>
小于:less<T>
小于等于:less_equal<T>
逻辑运算逻辑与:logical_and<T>
逻辑或:logical_or<T>
逻辑否:logical_no<T>
7. 适配器

    适配器概念源于设计模式中的适配器模式:将一个类的接口转化为另一个类的接口,使原本不兼

    容而不能合作的类,可以一起工作。适配器就是接口模板。

    7.1 容器适配器

类型描述声明
stack

FILO,底层是deque

template<class T, class Container = std::deque<T>> class stack
queue

FIFO,底层是deque

template<class T, class Container = std::deque<T>> class queue
priority_queue

进队后自动排序,默认大值先出,底层是vector

template<class T, class Container = std::vector<T>, class Compare = std::less<typename Container::value_type>> class priority_queue

    7.2 迭代器适配器

类型函数功能
插入迭代器front_insert_iteratorfront_inserter在容器的头部插入元素,底层调用push_front()
back_insert_iteratorback_inserter在容器的尾部插入元素,底层调用push_back()
insert_iteratorinserter在容器指定位置插入元素,底层调用insert()
反向迭代器reverse_iterator将迭代器的方向进行逆转,实现逆序遍历,底层是双向迭代器
流迭代器ostream_iterator输出流迭代器
istream_iterator输入流迭代器
移动迭代器move_iteratormake_move_iterator将元素从一个容器移动到另一个容器,不作copy

   7.3 仿函数适配器

         仿函数适配器是一种特殊的函数对象,它可以将一个仿函数转换为另一个仿函数,或者将一

         个普通函数指针转换为仿函数。

分类功能
绑定 bindbind1st将参数绑定为函数对象的第一个参数
bind2nd将参数绑定为函数对象的第二个参数
否定 negatenot1对一元函数对象取反
not2对二元函数对象取反
组合 composecompose1、compose2将两个仿函数对象组合成一个新的仿函数对象,其中一个仿函数对象的输出作为另一个仿函数对象的输入
普通函数修饰ptr_fun将一个普通函数指针转换为一个仿函数对象
成员函数修饰mem_fun存放对象指针
mem_fun_ref存放对象
8. 分配器

    STL的分配器是一个模板类。它提供了一种可移植的方式来管理内存,可以根据需要自动调整

    内存大小,并提供了一些特殊的内存分配策略,如内存池和堆栈分配等。STL分配器使用C++的

    new和delete操作符来分配和释放内存,可以在不同的平台和编译器下使用。

     

相关文章:

C++ STL(1)--概述

1. 简述 STL即标准模板库 Standard Template Library&#xff0c;包含了许多在计算机科学领域里所常用的基本数据结构和算法。STL具有高可重用性、高性能、高可移植性(跨平台)的优点。 两个特点&#xff1a; 1.1 数据结构和算法分离。 1.2 它不是面向对象的&#xff0c;是基于模…...

unity 2d 入门 飞翔小鸟 死亡闪烁特效(十三)

一、c#脚本 using System.Collections; using System.Collections.Generic; using UnityEngine;public class Bling : MonoBehaviour {public Texture img;public float speed;public static bool changeWhite false;private float alpha0f;// Start is called before the fi…...

Cannot find cache named ‘‘ for Builder Redis

当引入 Redissson 时&#xff0c;springCache 缓存机制失效 原因&#xff1a;springCache 默认使用本地缓存 Redisson 使用redis 缓存 最后都转成redis了。。。 总感觉哪不对 两者居然不共存...

IntelliJ IDEA的下载安装配置步骤详解

引言 IntelliJ IDEA 是一款功能强大的集成开发环境&#xff0c;它具有许多优势&#xff0c;适用于各种开发过程。本文将介绍 IDEA 的主要优势&#xff0c;并提供详细的安装配置步骤。 介绍 IntelliJ IDEA&#xff08;以下简称 IDEA&#xff09;之所以被广泛使用&#xff0c;…...

光线追踪算法实现

我们已经涵盖了所有要说的内容&#xff01; 我们现在准备编写第一个光线追踪器。 你现在应该能够猜测光线追踪算法是如何工作的。 首先&#xff0c;请花点时间注意一下&#xff0c;光在自然界中的传播只是从光源发出的无数光线&#xff0c;它们四处反弹&#xff0c;直到到达我…...

学习深度强化学习---第3部分----RL蒙特卡罗相关算法

文章目录 3.1节 蒙特卡罗法简介3.2节 蒙特卡罗策略评估3.3节 蒙特卡罗强化学习3.4节 异策略蒙特卡罗法 本部分视频所在地址&#xff1a;深度强化学习的理论与实践 3.1节 蒙特卡罗法简介 在其他学科中的蒙特卡罗法是一种抽样的方法。 如果状态转移概率是已知的&#xff0c;则是…...

linux虚拟机使用81-persistent-net.rule后接口名依然改变的问题处理

测试环境:vmware workstation17 、oracle linux 7.8 1. 复位原有ifname 1)nmcli c s 查看管理的网卡 [rootrac2 ~]# nmcli c s NAME UUID TYPE DEVICE enp0s3 5b01a9de-9552-45da-a84a-1ae6c9506354…...

ARMV8 - A64 - 跳转和返回指令

说明 C语言等高级语言&#xff0c;根据是否需要返回到触发跳转代码的下一条代码&#xff0c;跳转有两种语句&#xff1a; 不需要返回&#xff0c;例如&#xff1a;if&#xff0c;goto&#xff0c;switch&#xff0c;while等语句。需要返回&#xff0c;例如&#xff1a;函数调…...

QX320F28335,自研内核指令集,主频150MHz,自研工具链,纯国产DSP,硬件兼容TMS320F28335

32位单核CPU 主频150MHz flash 1M SRAM 500KB 单精度浮点运算FPU 3个4M精度12位的ADC 12个ePWM 6个HRPWM&#xff08;150ps&#xff09;...

《使用ThinkPHP6开发项目》 - 登录接口一

《使用ThinkPHP6开发项目》 - 安装ThinkPHP框架-CSDN博客 《使用ThinkPHP6开发项目》 - 设置项目环境变量-CSDN博客 《使用ThinkPHP6开发项目》 - 项目使用多应用开发-CSDN博客 《使用ThinkPHP6开发项目》 - 创建应用-CSDN博客 《使用ThinkPHP6开发项目》 - 创建控制器-CSD…...

zabbix精简模板

一、监控项目介绍 linux自带得监控项目比较多&#xff0c;也不计较杂&#xff0c;很多监控项目用不到。所以这里要做一个比较精简得监控模版 二、监控模板克隆 1.搜索原模板 2.克隆模板 全克隆模板&#xff0c;这样就和原来原模板没有联系了&#xff0c;操作也不会影响原模…...

GO设计模式——14、代理模式(结构型)

目录 代理模式&#xff08;Proxy Pattern&#xff09; 代理模式的核心角色&#xff1a; 优缺点 使用场景 注意事项 代码实现 代理模式&#xff08;Proxy Pattern&#xff09; 代理模式&#xff08;Proxy Pattern&#xff09;通过引入代理对象来控制对真实对象的访问。 代…...

外贸SOHO建站怎么做?海洋建站方法策略?

外贸SOHO建站多少钱&#xff1f;外贸自助建站系统有哪些&#xff1f; 随着全球化的加速发展&#xff0c;外贸SOHO已经成为越来越多创业者的选择。然而&#xff0c;要想在竞争激烈的外贸市场中脱颖而出&#xff0c;一个专业的外贸网站是必不可少的。接下来海洋建站将探讨外贸SO…...

商城免费搭建之java鸿鹄云商 java电子商务商城 Spring Cloud+Spring Boot+mybatis+MQ+VR全景+b2b2c

鸿鹄云商 SAAS云产品概述 1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、My…...

【淘宝网消费类电子产品销售数据可视化】

淘宝网消费类电子产品销售数据可视化 引言数据爬取与处理数据可视化系统功能1. 总数据量分析2. 店铺总数据3. 店铺销售额排名4. 不同电子商品销售价格5. 单个商品价格排名6. 不同省份平均销量7. 不同地区的平均销售额8. 省份数量9. 每个省份有用的平均个数 创新点结语 引言 随…...

AI编译器及TVM概述

AI编译器 AI编译器有许多不同的类型和品牌&#xff0c;以下是一些常见的AI编译器&#xff1a; TensorFlow&#xff1a;谷歌开发的深度学习框架&#xff0c;它包含了一个用于优化和编译TensorFlow模型的编译器。 PyTorch&#xff1a;一个基于Python的开源深度学习框架&#xf…...

排序-归并排序与计数排序

文章目录 一、归并排序1、概念2、过程3、代码实现4、复杂度5、稳定性 二、 计数排序1、思路2、代码实现3、复杂度&#xff1a;4、稳定性 一、归并排序 1、概念 是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已…...

国产数据库适配-人大金仓(kingbase V8R3)

金仓数据库是基于POSTGRE_SQL 参考资料 国产数据库人大金仓踩坑记录和函数适配_金仓数据库关系不存在-CSDN博客 Springboot工程 适配人大金仓 kingbase V8R3 引入驱动包和方言包 hibernate-5.2.17.Finaldialect.jar kingbase8-8.2.0.jar application.yml文件 driver-cla…...

HAAS 哈斯机床 读写刀补数据

哈斯机床不管是串口机床还是网口机床 都提供了Q命令 可以使用Q命令 进行刀具补偿的读取和写入 最多支持200把刀的 读取和写入...

Visual studio+Qt开发环境搭建以及注意事项和打开qt的.pro项目

下载qt-然后安装5.14.2_msvc2017 不知道安装那个就全选5.14.2的父级按钮 https://download.qt.io/archive/qt/5.14/5.14.2/ 安装Visual studio,下载直接下一步就行 配置Visual studio的qt环境 在线安装-重启Visual studio会自动安装 离线安装-关闭Visual studio点击安装 关闭…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体&#xff08;对象或容器&#xff09;QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质&#xff08;定义颜色、反光等&#xff09;QFirstPersonC…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...