MyTinySTL 简单分析(二)--util.h exceptdef.h

news2024/11/19 15:25:09

目前在学习STL,看到一个开源的项目MyTinySTL,非常不错。想着照着这个代码自己敲一遍应该也能有些进步。然后就开始了学习过程。

首先分析的是vector

以下是由vector.h关联的所有头文件

本篇分析一下util.h , xxx

这里先来研究几个函数

std::enable_if

std::is_constructible

std::is_default_constructible

std::is_copy_constructible<U1

std::is_convertible

首先看std::enable_if的定义:

// Primary template. (基本定义)
/// Define a member typedef @c type only if a boolean constant is true.
template<bool, typename _Tp = void>
 struct enable_if
 { };

// Partial specialization for true. (偏特化版本)
template<typename _Tp>
 struct enable_if<true, _Tp>
 { typedef _Tp type; };

根据以上定义可以看出,如果std::enable_if的第一个参数为true,则把第二个模板参数定义为type,否则什么都没有。

后面的三个定义

std::is_constructible , std::is_default_constructiblestd::is_copy_constructible有如下的继承关系

这几个类用于判断是否能够构造对象,它们有一个成员变量value,是true或false

std::is_convertible 是判断能否转换

了解了以上函数的作用后,来看util.h会简单一些。

该文件中先定义了右值转发(move)、完美转发(forward)

然后定义了swap相关

然后定义了pair结构体,该结构体有两个成员变量,有几个构造函数,

构造函数包括默认构造函数,隐式转化构造函数,等等 ; 重载了赋值操作符,swap函数,== 操作符。

然后还在最外面重载了两个pair的比较操作符(==, <, !=, > 等等),以及针对pair的swap函数,和如何构造一个pair的make_pair函数。

=============================================

exceptdef.h 文件定义了几个有关异常的宏

#define MYSTL_DEBUG(expr) \
 assert(expr)  

#define THROW_LENGTH_ERROR_IF(expr, what) \
 if ((expr)) throw std::length_error(what)

#define THROW_OUT_OF_RANGE_IF(expr, what) \
 if ((expr)) throw std::out_of_range(what)

#define THROW_RUNTIME_ERROR_IF(expr, what) \
 if ((expr)) throw std::runtime_error(what)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

酒店订房小程序源码系统:帮您打造类似美团的酒店模式的小程序 带完整的安装部署教程

随着移动互联网的快速发展&#xff0c;小程序已经成为一种新型的应用形态&#xff0c;为各大行业提供了更加便捷的服务。其中&#xff0c;酒店预订小程序作为一种方便快捷的预订方式&#xff0c;备受用户青睐。小编给大家分享一款酒店订房小程序源码系统&#xff0c;旨在帮助您…

Ubuntu20.04-剪贴板

针对图形界面用户 1.两种方式 1.1 安装Parcellite 简单轻量级剪贴板管理器 sudo apt install parcellite 1.2 安装Gpaste 更强大的剪贴板管理器&#xff0c;包含历史记录和同步功能 sudo apt install gpaste

参加数据库活动,学习知识,领取奖品

去年12月1日我发了一篇关于数据库高可用的文章《我们的数据库需要什么样的HA&#xff1f;》&#xff0c;文中介绍了阿里云PolarDB MySQL通过了热备无感秒切技术&#xff0c;解决了HA场景下的故障探测、切换速度和切换体验的问题。文末提到了线上的PolarDB功能体验馆&#xff0c…

汽车研发测试大全

车研发中需要做的试验&#xff0c;这些试验都是保证我们的车能安全、稳定、可靠行驶的必要条件。主要包含以下内容&#xff1a; 一、整车试验项目 1.1整车可靠性试验 1.2 NVH试验 1.3 HVAC试验 1.4 EMC试验 1.5 化学分析试验 1.6 整车道路性能试验 二、零部件试验项目 …

特征工程之降维算法

数据降维简介 数据降维即对原始数据特征进行变换,使得特征的维度减少。 依据降维过程是否可以用一个线性变换表示,降维算法可以分为线性降维算法和非线性降维算法,下图展示了各种降维算法及其类别: 降维的必要性: 多重共线性和预测变量之间相互关联。多重共线性会导致解空…

【架构】docker实现集群主从扩容【案例3/4】

实现集群主从扩容 当整个集群扛不住流量的情况时&#xff0c;需要给集群扩容增加设备&#xff0c;由3主3从&#xff0c;扩为4主4从。实现&#xff1a; 示意图如下&#xff1a; 第一步&#xff1a;新创建两个节点&#xff08;redis-node-7&#xff0c;端口6387和 redis-node…

白码CRM快速实现报价转订单功能

某crm项目已经做到销售模块了&#xff0c;销售模块实现了从报价到销售单&#xff0c;再到财务模块的应收流程。但使用过程中发现不好用的地方&#xff1a;报价通过后客户下单&#xff0c;销售相关人员又要重新录入数据一样的销售单&#xff0c;觉得这样的操作比较繁琐&#xff…

若依基于sm-crypto实现前后端登录密码加密

上一节介绍了基于jsencrypt实现的密码加密解密登录功能&#xff0c;这次来介绍基于sm-crypto实现前后端登录密码加密&#xff0c;本次采用的是sm2进行的加密解密。 后端 首先从后端代码开始写起(因为公钥和私钥都是要从java代码中生成)&#xff1a; 首先需要引入sm-crypto的j…

【UE Niagara 条带粒子系列】01-初识条带渲染器

目录 效果 步骤 一、创建条带渲染器 二、增加粒子生成数量 三、设置条带粒子的初始宽度 效果 步骤 一、创建条带渲染器 1. 新建一个Niagara系统 选择“Simple Sprite Burst”模板 这里命名为“NS_RibbonRenderer” 打开“NS_RibbonRenderer”&#xff0c;删除“Sprite…

Kubernetes API 和流量控制:管理请求数量和排队进程

本文描述了我们最近遇到的一个真实案例&#xff1a;Kubernetes API 因其中一个集群中的大量请求而瘫痪。今天&#xff0c;我们将讨论我们如何处理这个问题&#xff0c;并提供一些关于如何预防它的提示。 高并发搞崩 Kubernetes API 一个非常普通的早晨&#xff0c;我们开始了…

KT148A语音芯在智能锁语音提示的优势在哪里成本还是性能

智能锁&#xff0c;已经广泛的应用于生活的各个场景&#xff0c;确实是一个好产品&#xff0c;我自己都在用&#xff0c;也很方便 而锁基本上都搭配有语音芯片或者蜂鸣器&#xff0c;低端的产品都是蜂鸣器&#xff0c;中端的产品基本都搭配语音芯片而智能锁方案中&#xff0c;…

智谱AI技术开放日:新一代基座大模型GLM-4及GLMs的发布

2024年1月16日&#xff0c;智谱AI举行了一次重要的技术开放日&#xff0c;发布了新一代基座大模型GLM-4和定制化的大模型GLMs。此次发布标志着智谱AI在人工智能领域的新一轮突破&#xff0c;进一步提升了大模型的性能&#xff0c;并降低了使用门槛&#xff0c;使得更多的人能够…

从界面探讨产品的卖点

背景 最近经常用这个平台来发布一些东西&#xff0c;总觉得体验不够好&#xff0c;毕竟这是号称是技术人员的聚集地&#xff0c;为何自己做的这个东西&#xff0c;好不好用&#xff0c;交互性咱们放到第二位&#xff0c;看了起码应该舒服&#xff0c;这应该是第一位的吧&#…

KubeSphere 核心实战之一【在kubesphere平台上部署mysql】(实操篇 1/3)

文章目录 1、登录kubesphere平台2、kubesphere部署应用分析2.1、工作负载2.2、服务2.3、应用路由2.4、任务2.5、存储与配置2.6、部署应用三要素 3、部署mysql3.1、mysql容器启动实例3.2、mysql部署分析3.3、创建mysql的配置3.4、创建mysql的数据卷pvc3.5、创建mysql工作负载3.6…

09- OpenCV:图像上采样和降采样

目录 1、上采样和降采样 简介 2、采样的应用场景 3、采样的API 4、图像金字塔概念 5、代码演示 1、上采样和降采样 简介 在图像处理中&#xff0c;上采样&#xff08;Upsampling&#xff09;和降采样&#xff08;Downsampling&#xff09;是常用的操作。 &#xff08;1&…

申泰勇教练的独家人物化身系列即将登陆 The Sandbox

申泰勇&#xff08;Shin Tae-yong&#xff09;教练是足球界的传奇人物&#xff0c;他来到 The Sandbox&#xff0c;推出了自己的专属人物化身系列。作为前 K 联赛中场球员和印尼队取得历史性成就的幕后教练&#xff0c;他的传奇经历现在已经影响到了虚拟世界。 向过去、现在和未…

C:\Windows\Temp占用空间过大, 这样删除

1. windowsi, 打开windows设置, 点击系统 2. 点击存储, 点击临时文件 3. 选择你想要删除的临时文件

Abp vNext(一)说明

平时工作中使用Abp vNext框架比较多&#xff0c;但没有把文档系统的学习过&#xff0c;对于技术人员&#xff0c;不管什么框架&#xff0c;基本上拿到框架就可以着手开发了&#xff0c;都是c#语言&#xff0c;每套系统只是业务不同罢了&#xff0c;对于写业务的技术人员&#x…

【QT】自定义对话框及其调用

目录 1 对话框的不同调用方式 2 对话框QWDialogSize的创建和使用 3 对话框QWDialogHeaders的创建和使用 4 对话框QWDialogLocate的创建与使用 5 利用信号与槽实现交互操作 1 对话框的不同调用方式 在一个应用程序设计中&#xff0c;为了实现一些特定的功能&#xff0c;必须设计…

Ceph的介绍与部署

目录 存储基础 单机存储设备 DAS&#xff08;直接附加存储&#xff0c;是直接接到计算机的主板总线上去的存储&#xff09; NAS&#xff08;网络附加存储&#xff0c;是通过网络附加到当前主机文件系统之上的存储&#xff09; SAN&#xff08;存储区域网络&#xff09; 单…