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

C++ //练习 16.29 修改你的Blob类,用你自己的shared_ptr代替标准库中的版本。

C++ Primer(第5版) 练习 16.29

练习 16.29 修改你的Blob类,用你自己的shared_ptr代替标准库中的版本。

环境:Linux Ubuntu(云服务器)
工具:vim

 

代码块
template <typename> class BlobPtr;
template <typename> class Blob;
template <typename T> bool operator==(const Blob<T>&, const Blob<T>&);template <typename T>class Blob {friend class BlobPtr<T>;friend bool operator==<T>(const Blob<T>&, const Blob<T>&);public:typedef T value_type;typedef typename std::vector<T>::size_type size_type;Blob();Blob(std::initializer_list<T> il);size_type size() const { return data->size(); }bool empty() const { return data->empty(); }void push_back(const T& t) { data->push_back(t); }void push_back(T&& t) { data->push_back(std::move(t)); }void pop_back();T& back();T& operator[](size_type i);private:SharedPtr<std::vector<T>> data;void check(size_type i, const std::string& msg) const;
};template <typename T> void Blob<T>::check(size_type i, const std::string& msg) const {if (i >= data->size()) {throw std::out_of_range(msg);}
}template <typename T> T& Blob<T>::back() {check(0, "back on empty Blob");return data->back();
}template <typename T> T& Blob<T>::operator[](size_type i) {check(i, "subscript out of range");return (*data)[i];
}template <typename T> void Blob<T>::pop_back() {check(0, "pop_back on empty Blob");data->pop_back();
}template <typename T> Blob<T>::Blob() : data(SharedPtr<std::vector<T>>(new std::vector<T>())) {}template <typename T> Blob<T>::Blob(std::initializer_list<T> il): data(SharedPtr<std::vector<T>>(new std::vector<T>(il))) {}template <typename T> class BlobPtr {public:BlobPtr() : curr(0) {}BlobPtr(Blob<T>& a, size_t sz = 0) : wptr(a.data), curr(sz) {}T& operator*() const {auto p = check(curr, "dereference past end");return (*p)[curr];}BlobPtr& operator++();BlobPtr& operator--();private:std::size_t curr;WeakPtr<std::vector<T>> wptr;SharedPtr<std::vector<T>> check(std::size_t, const std::string&) const;
};template <typename T> SharedPtr<std::vector<T>> BlobPtr<T>::check(std::size_t i, const std::string& msg) const {auto ret = wptr.lock();if (!ret) {throw std::runtime_error("unbound BlobPtr");}if (i >= ret->size()) {throw std::out_of_range(msg);}return ret;
}template <typename T> BlobPtr<T>& BlobPtr<T>::operator++() {check(curr, "increment past end of BlobPtr");++curr;return *this;
}template <typename T> BlobPtr<T>& BlobPtr<T>::operator--() {--curr;check(curr, "decrement past begin of BlobPtr");return *this;
}

相关文章:

C++ //练习 16.29 修改你的Blob类,用你自己的shared_ptr代替标准库中的版本。

C Primer&#xff08;第5版&#xff09; 练习 16.29 练习 16.29 修改你的Blob类&#xff0c;用你自己的shared_ptr代替标准库中的版本。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 template <typename> class BlobP…...

【Mode Management】CanNm处于PBS状态下接收到一帧诊断报文DCM会响应吗

目录 前言 正文 1.CanNm从RSS状态切换到PBS状态行为分析 1.1.CanNm动作 1.2.ComM动作 1.3.DCM动作 1.4 小结 2.CanNM在PBS状态下收到一帧诊断报文行为分析 2.1.DCM动作1 2.2. ComM动作 2.3. DCM动作2 2.3. CanNm动作 2.4 问题 2.5 分析 3.总结 前言 我们知道EC…...

【C++】模版:范式编程、函数模板、类模板

目录 一.范式编程 二.函数模板 1.概念与格式 2.原理 3.实例化 4.匹配规则 三.类模板 一.范式编程 在写C函数重载的时候&#xff0c;可能会写很多同一类的函数&#xff0c;例如交换函数&#xff1a; void Swap(int& left, int& right) {int temp left;left r…...

验证图片旋转

最近在使用百度图片翻译时遇到一个问题&#xff0c;就是图片会翻转90&#xff0c;经与百度沟通&#xff0c;发现是原始图片中有个旋转参数引起的。 于是写个demo验证一下。 // 获取元数据中的旋转方向 func getOrientation() int {//打开图像文件f, err : os.Open("image…...

宏景eHR /ajax/ajaxService SQL注入漏洞复现

0x01 产品简介 宏景eHR人力资源管理软件是一款人力资源管理与数字化应用相融合,满足动态化、协同化、流程化、战略化需求的软件。 0x02 漏洞概述 宏景eHR /ajax/ajaxService 接口处存在SQL注入漏洞,,未经身份验证的远程攻击者通过利用SQL注入漏洞配合数据库xp_cmdshell可…...

从源码看 Redis:深入理解 redisDb 和 redisObject

Redis 是一个广泛使用的内存数据库&#xff0c;以其高性能和丰富的数据结构而闻名。不同于磁盘数据库&#xff0c;磁盘数据库将数据读取到文件中维护&#xff0c;而内存数据库将数据存储在内存中&#xff0c;意味着其想要维护数据&#xff0c;必须在代码中维护一个保存数据的结…...

unity中实现流光效果——世界空间下

Properties{_MainTex ("Texture", 2D) "white" {}_FlowColor ("Flow Color", Color) (1, 1, 1, 1) // 流光颜色_FlowFrequency ("Flow Frequency", Float) 1.0 // 流光频率_FlowSpeed ("Flow Speed", Float) 1.0 // 流光…...

项目经验分享:用4G路由器CPE接海康NVR采用国标GB28181协议TCP被动取流一段时间后设备就掉线了

最近我们在做一个生态化养殖的项目时&#xff0c;发现一个奇怪的现象&#xff1a; 项目现场由于没有有线网络&#xff0c;所以&#xff0c;我们在现场IPC接入到海康NVR之后&#xff0c;再通过一款4G的CPE接入到天翼云的国标GB28181视频平台&#xff1b;我们采用UDP协议播放NVR…...

【RabbitMQ】RabbitMQ不公平分发_预取值

一、不公平分发 1、简介 RabbitMQ中的不公平分发&#xff08;Unfair Dispatch&#xff09;是指当多个消费者&#xff08;Consumers&#xff09;同时订阅同一个队列&#xff08;Queue&#xff09;时&#xff0c;消息的分发机制并非严格平均或公平&#xff0c;而是基于某些条件…...

最新AI模型使用指南和模型

市面上最好的AI大模型 OpenAI GPT-4&#xff1a; 概述&#xff1a;GPT-4 是 OpenAI 发布的最新一代大型语言模型&#xff0c;具备更强的理解和生成自然语言的能力。特点&#xff1a; 强大的文本生成和理解能力。支持多语言处理。可用于各种应用场景&#xff0c;如对话生成、内容…...

数据结构之八大基本排序方法

在数据结构中&#xff0c;排序是一个重要的操作&#xff0c;它有助于提高数据的可读性和可操作性。排序算法有多种&#xff0c;各有优缺点&#xff0c;适用于不同的场景。以下是八大经典排序算法的介绍&#xff1a; 1. 冒泡排序&#xff08;Bubble Sort&#xff09; 原理&…...

《Milvus Cloud向量数据库指南》——什么是高可用:深入理解数据库系统中的高可用性架构

什么是高可用:深入理解数据库系统中的高可用性架构 在信息技术日新月异的今天,高可用性(High Availability,简称HA)已成为衡量一个系统,尤其是数据库系统稳定性和可靠性的重要标准。高可用性的核心目标在于确保系统能够持续不断地提供服务,最大限度地减少因维护活动、硬…...

C++ | Leetcode C++题解之第319题灯泡开关

题目&#xff1a; 题解&#xff1a; class Solution { public:int bulbSwitch(int n) {return sqrt(n 0.5);} };...

C# 使用 NLog 输出日志到文件夹

在项目中使用 NuGet 安装 NLog 包以及 NLog.Config 包 配置 nlog.config 在项目的根目录下创建一个 Nlog.config 文件&#xff08;如果还没有&#xff09;&#xff0c;然后添加如下配置&#xff1a; <?xml version"1.0" encoding"utf-8" ?> <…...

node.js使用NodeMachineID 生成唯一UUID和注意事项

node-machine-id用于获取或生成唯一的机器ID 如何使用 const { machineId, machineIdSync } require(node-machine-id) JSON.stringify(machineIdSync({original: true})) ;方法&#xff1a; machineIdSync 此函数同步获取操作系统本机UUID/GUID&#xff0c;默认情况下进行哈…...

AI大模型在数据治理中的应用

目前&#xff0c;企业的数据治理工作以人工实施为主&#xff0c;其中一些重复性较强的工作&#xff0c;如&#xff1a;数据标准制定和映射、元数据信息完善、数据目录挂载等&#xff0c;需要消耗大量的人力和时间成本&#xff0c;这给本来就难以量化业务价值的治理工作的顺利推…...

【初学人工智能原理】【12】循环:序列依赖问题

前言 本文教程均来自b站【小白也能听懂的人工智能原理】&#xff0c;感兴趣的可自行到b站观看。 代码及工具箱 本专栏的代码和工具函数已经上传到GitHub&#xff1a;1571859588/xiaobai_AI: 零基础入门人工智能 (github.com)&#xff0c;可以找到对应课程的代码 正文 对于…...

【QT】无法打开QT的ui文件,出现闪退情况

打开qt的ui文件出现闪退的情况&#xff1a; 解决办法&#xff1a;点击扩展-Qt VS Tools-Options 找到Qt General中的Qt Designer 的Run in detached window改为True。...

三、Spring-WebFlux实战案例-流式

目录 一、springboot之间通讯方式 1. 服务端 (Spring Boot) 1.1 添加依赖 1.2 控制器 2. 客户端 (WebClient) 2.1 添加依赖 2.2 客户端代码 3. 运行 二、web与服务之间通讯方式 1、服务端代码 2、客户端代码 3、注意事项 三、移动端与服务端之间通讯方式…...

html+css 实现hover双层按钮

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享htmlcss 绚丽效果&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 文…...

SPIFFS与LittleFS的对gz文件格式的区别

SPIFFS 只能安装在Arduino上。LittleFS支持Arduino IDE和VScode的 PlatformIO。 SPIFFS serveStatic: server.serveStatic("/", SPIFFS, "/") 负责提供 SPIFFS 文件系统中的文件。您可以在 SPIFFS 上放置 .gz 文件&#xff0c;并该方法将自动处理它们。 …...

STM32L051K8U6-开发资料

STM32L051测试 &#xff08;四、Flash和EEPROM的读写&#xff09;-云社区-华为云 (huaweicloud.com) STM32L051测试 &#xff08;四、Flash和EEPROM的读写&#xff09; - 掘金 (juejin.cn) STM32L0 系列 EEPROM 读写&#xff0c;程序卡死&#xff1f;_stm32l0片内eeprom_stm3…...

Markdown语法学习

Markdown学习 一、基础语法讲解 1. 换行 本行末尾双空格然后回车&#xff08;在Typora的中直接回车也可以&#xff09; 2. 换段 本段末尾两次回车 3. 加粗 **加粗** __加粗__效果&#xff1a;加粗 4. 斜体 *加粗* _加粗_效果&#xff1a;斜体 5. 斜体加粗 ***加粗**…...

[最短路Floyd],启动!!!

B3647 【模板】Floyd #include<bits/stdc.h> #define ll long long #define fi first #define se second #define pb push_back #define PII pair<int,int > #define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0) using namespace std; const int N …...

7月29(信息差)

&#x1f30d;最强模型 Llama 3.1 如期而至&#xff01;扎克伯格最新访谈&#xff1a;Llama 会成为 AI 界的 Linux &#x1f384;谷歌AlphaProof攻克国际奥赛数学题 https://www.51cto.com/article/793632.html ✨SearchGPT第一波评测来了&#xff01;响应速度超快还没广告&…...

ubuntu中禁止使用鼠标拖动来移动文件

windows和ubuntu中都可以拖动文件到其他路径&#xff0c;然后达到移动文件的目的。 这种方式有好处也有坏处&#xff0c;好处是移动文件方便了&#xff0c;坏处是误操作后会造成故障&#xff0c;尤其是ubuntu中&#xff0c;本身鼠标就特别灵敏并且操作不便&#xff0c;拖动一个…...

【密码学】椭圆曲线密码体制(ECC)

椭圆曲线密码体制&#xff08;Elliptic Curve Cryptography, ECC&#xff09;是一种基于椭圆曲线数学特性的公钥密码系统。在介绍椭圆曲线之前&#xff0c;我们先来了解一下椭圆曲线的基本概念。 一、椭圆曲线是什么&#xff1f; &#xff08;1&#xff09;椭圆曲线的数学定义…...

第25集《大佛顶首楞严经》

丑二、腾疑细释 分二&#xff1a;寅一、阿难腾疑&#xff1b;寅二、如来细释 请大家打开讲义第五十六页&#xff0c;“丑二、腾疑细释”。 本经的修学重点&#xff0c;就是修学首楞严王三昧。它的整个重点&#xff0c;其实就是一个心地法门。我们在行菩萨道的时候慢慢会发觉…...

python 读写文件之 open 和 with open() 详细解析

python 读写文件之 open 和 with open() 详细解析 文章目录 python 读写文件之 open 和 with open() 详细解析1. open() 和 with open() 能打开不同的文件类型吗&#xff1f;2. 文本文件和二进制文件的区别2.1 文本文件 (Text Files)2.2 二进制文件 (Binary Files)区别 3. 读文…...

操作系统:内存----知识点

什么是虚拟内存&#xff1f; 虚拟内存简称虚存&#xff0c;是计算机系统内存管理的一种技术。它是相对于物理内存而言的&#xff0c;可以理解为“假的”内存。它使得应用程序认为它拥有连续可用的内存&#xff08;一个连续完整的地址空间&#xff09;&#xff0c;允许程序员编…...

东莞网站排名优化/seo技术培训岳阳

VC界面库分两大类&#xff1a;一&#xff0c;Direct UI&#xff0c;优点&#xff1a;界面绚丽。二&#xff0c;MFC扩展库。优点&#xff1a;1&#xff0c;方便用户。2&#xff0c;减少开发成本。3&#xff0c;界面相对好看。BCG属于后者&#xff0c;非常是否适合优化办公软件界…...

加强政务门户网站建设/如何推广一个品牌

题目描述&#xff1a; 输入一个复杂链表&#xff08;每个节点中有节点值&#xff0c;以及两个指针&#xff0c;一个指向下一个节点&#xff0c;另一个特殊指针指向任意一个节点&#xff09;。 输入&#xff1a;输入可能包含多个测试样例&#xff0c;输入以EOF结束。对于每个测试…...

提供微网站制作网络公司/网络运营策划

下载地址&#xff1a;http://wilmer.gaast.net/main.php/axel.html Axel是命令行下的多线程下载工具&#xff0c;支持断点续传&#xff0c;速度通常情况下是Wget的几倍。 下载后使用如下命令编译安装&#xff1a; #tar zxvf axel-1.0a.tar.gz #cd axel-1.0a/ #./con…...

web网 打开wordpress/注册公司网上申请入口

今天在Oracle 12.1.0.2.0 版本中RMAN 连接PDB 用户时和连接CDB 显示提示信息一样connected to target database: CNDBA (DBID215559030)怀疑自己是不是做错了&#xff0c;检查tnsname.ora 有以下内容并没有错&#xff0c;于是查视图 v$pdbs 结果是对的&#xff0c;于是同样的操…...

彩票网站开发/seo站内优化最主要的是什么

《泰山版小学信息技术第三册上册教案 全册》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《泰山版小学信息技术第三册上册教案 全册(19页珍藏版)》请在人人文库网上搜索。1、第1课 手工制作网上搜教材分析 在网络成为人们获取信息的主要渠道之一的今天&#xff0c;…...

做网站工资怎么样/网络推广渠道有哪些

3.UpdateData(TRUE) 与UpdateData(FALSE)的区别 -UpdateData(TRUE) 从窗口中获得数据&#xff0c;更新到空间变量 -UpdateData(FALSE) 给空间变量赋值后&#xff0c;更新到窗口中可见 4.双字节转换为单字节 与 单字节转换为双字节 【双字节转换为单字节1】 -char ansiRemoteHo…...