C++ //练习 12.20 编写程序,逐行读入一个输入文件,将内容存入一个StrBlob中,用一个StrBlobPtr打印出StrBlob中的每个元素。

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

练习 12.20 编写程序,逐行读入一个输入文件,将内容存入一个StrBlob中,用一个StrBlobPtr打印出StrBlob中的每个元素。

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

 

代码块
/*************************************************************************> File Name: ex12.20.cpp> Author: > Mail: > Created Time: Thu 18 Apr 2024 09:15:15 AM CST************************************************************************/#include<iostream>
#include<fstream>
#include<sstream>
#include<string>
#include<vector>
#include<memory>
using namespace std;class StrBlobPtr;class StrBlob{friend class StrBlobPtr;public:typedef vector<string>::size_type size_type;StrBlob(): data(make_shared<vector<string>>()) {}StrBlob(initializer_list<string> il): data(make_shared<vector<string>>(il)) {}size_type size() const { return data->size(); }bool empty() const { return data->empty(); }void push_back(const string &t) { data->push_back(t); }void pop_back();string &front();string &back();string &front() const;string &back() const;StrBlobPtr begin();StrBlobPtr end();private:shared_ptr<vector<string>> data;void check(size_type i, const string &msg) const;
};void StrBlob::pop_back(){check(0, "pop_back on empty StrBlob");data->pop_back();
}string& StrBlob::front(){check(0, "front on empty StrBlob");return data->front();
}string& StrBlob::back(){check(0, "back on empty StrBlob");return data->back();
}string& StrBlob::front() const{check(0, "front on empty StrBlob");return data->front();
}string& StrBlob::back() const{check(0, "back on empty StrBlob");return data->back();
}void StrBlob::check(size_type i, const string &msg) const{if(i >= data->size()){throw out_of_range(msg);}
}class StrBlobPtr{friend bool compare(StrBlobPtr &a, const StrBlobPtr &b);public:StrBlobPtr(): curr(0) {}StrBlobPtr(StrBlob &s, size_t sz = 0): wptr(s.data), curr(sz) {}string &deref() const;StrBlobPtr &incr();private:shared_ptr<vector<string>> check(size_t, const string &) const;weak_ptr<vector<string>> wptr;size_t curr;
};shared_ptr<vector<string>> StrBlobPtr::check(size_t i, const string &msg) const {auto ret = wptr.lock();if(!ret){throw runtime_error("unbound StrBlobPtr");}if(i >= ret->size()){throw out_of_range(msg);}return ret;
}string &StrBlobPtr::deref() const{auto p = check(curr, "dereference past end");return (*p)[curr];
}StrBlobPtr &StrBlobPtr::incr(){check(curr, "increment past end of StrBlobPtr");++curr;return *this;
}StrBlobPtr StrBlob::begin(){return StrBlobPtr(*this);
}StrBlobPtr StrBlob::end(){return StrBlobPtr(*this, data->size());
}bool compare(StrBlobPtr &a, const StrBlobPtr &b){if(a.wptr.lock() == b.wptr.lock() && a.curr == b.curr){return true;}return false;
}int main(){ifstream in("12.20.txt");StrBlob file;string str;StrBlobPtr nFile(file);while(getline(in, str)){file.push_back(str);}for(auto it = file.begin(); !compare(it, file.end()); it.incr()){cout<<it.deref()<<" ";}cout<<endl;in.close();return 0;
}
运行结果显示如下

在这里插入图片描述

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

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

相关文章

实习学习内容-WS协议

WS协议&#xff0c;即WebSocket协议&#xff0c;是一种网络通信协议&#xff0c;提供了一种在单个长连接上进行全双工、双向交互的通信渠道。WebSocket 是独立的、创建在 TCP 上的协议。它使得客户端和服务器之间的数据交换变得更加简单&#xff0c;允许服务端主动向客户端推送…

《从零开始的Java世界》07常用类与基础API

《从零开始的Java世界》系列主要讲解Javase部分&#xff0c;从最简单的程序设计到面向对象编程&#xff0c;再到异常处理、常用API的使用&#xff0c;最后到注解、反射&#xff0c;涵盖Java基础所需的所有知识点。学习者应该从学会如何使用&#xff0c;到知道其实现原理全方位式…

电脑显示有音量但是没有声音?5个方法足够解决问题!

“为什么我的电脑明明打开了声音&#xff0c;但是我看视频时却没有任何声音呢&#xff1f;应该怎么解决呀&#xff1f;” 在日常使用电脑的过程中&#xff0c;电脑声音的正常播放是很重要的&#xff0c;我们无论是听音乐还是看电影&#xff0c;都是离不开电脑声音的。遇到电脑显…

【Java EE】文件内容的读写——数据流

目录 1.InputStream概述 1.1方法 2.FileInputStream概述 2.1构造方法 2.2代码示例 2.3.利用Scanner进行字符读取 3.OutputStream概述 3.1方法 3.2利用OutputStreamWriter进行字符写入 3.3利用PrintWriter找到我们熟悉的方法 1.InputStream概述 1.1方法 修饰符及返回…

iOS 在OC旧项目中使用Swift进行混编

iOS 在OC旧项目中使用Swift进行混编 1、创建桥接文件 ​ 第一次在Swift创建OC文件&#xff0c;或者第一次OC创建Swift时&#xff0c;xcode会提示桥接&#xff0c;Creat Bridging Header即可,这个文件用于Swift调用OC文件&#xff0c;与OC调用Swift无关。 2、在TARGETS中设置D…

Linux文件系统 软硬链接

文章目录 文件背景知识磁盘文件磁盘物理结构磁盘存储结构对磁盘的存储进行逻辑抽象Boot BlockSuper blockData blocksInode TableBlcokBitmapinode BitmapGroup Descriptor Table 文件名和inode编号创建文件删除文件查找文件 软硬链接软链接硬链接查看文件信息stat命令取消软硬…

玩转智能:深度强化学习在游戏AI中的应用

玩转智能&#xff1a;深度强化学习在游戏AI中的应用 1 引言 1.1 简述深度强化学习(DRL)在游戏AI中的革命性影响。 当我们回顾人工智能的发展历程&#xff0c;可以明显地看到深度强化学习&#xff08;Deep Reinforcement Learning, DRL&#xff09;的出现&#xff0c;在游戏AI…

Docker容器的原理及应用详解(二)

本系列文章简介: Docker是一种开源的容器化技术,它将应用程序及其依赖项打包为一个容器,以便在任何环境下运行。与传统的虚拟机相比,Docker容器更加轻量级且快速,可以在几秒钟内启动和停止。Docker的原理和应用非常广泛,可以用于开发、测试、部署和扩展应用程序。 在传统…

【埋点探针】微信小程序SDK安装

一、下载微信小程序SDK埋点代码 选择Wechat&#xff0c;复制sdk代码 在项目根目录下&#xff0c;创建sdk文件&#xff0c;webfunny.event.js 二、在app.js文件中&#xff0c;引入埋点SDK代码 首先引入sdk代码 require("./webfunny.event.js")引入兼容代码&#x…

python网页篇

爬取网页动态数据通常涉及到JavaScript渲染的内容&#xff0c;这类数据并不是在原始HTML文档中直接提供的&#xff0c;而是通过AJAX请求、WebSocket通信或者其他客户端渲染技术生成的。以下是几种常见的处理方法&#xff1a; 方法1&#xff1a;使用带有JavaScript渲染功能的库 …

DHT11实验

文章目录 11.11.2 234 DS18B20 只能检测温度 右边这几个 都能 1 1.1 数字信号输出 指 0/1使用单总线通信 1个IO口就能获取温湿度 T/H要有 模数转化&#xff08;内部还有个8位单片机&#xff09;电容感湿元件 白色的 还有个ic NTC测温 可能在ic内部 使用单片机内部测温 精确度不…

STM32存储左右互搏 SDIO总线FATS文件读写SD/MicroSD/TF卡

STM32存储左右互搏 SDIO总线FATS文件读写SD/MicroSD/TF卡 SD/MicroSD/TF卡是基于FLASH的一种常见非易失存储单元&#xff0c;由接口协议电路和FLASH构成。市面上由不同尺寸和不同容量的卡&#xff0c;手机领域用的TF卡实际就是MicroSD卡&#xff0c;尺寸比SD卡小&#xff0c;而…

基于STM32温控风扇冷却系统设计

摘要&#xff1a; 在当前社会&#xff0c;随着大家对生活质量的追求和环保意识的加强&#xff0c;温控风扇作为一种节能产品备受社会的关注。温控风扇广泛应用于工业生产、家用电器、医疗美容设备和公共场所&#xff0c;提高了人们的生活效率和生活上的便利。这篇文章是根据单…

【网络协议】 TCP与UDP协议区别及应用场景深度分析

1. TCP与UDP简介 1.1 TCP 1.1 定义 TCP&#xff08;TransmissionControl Protocol&#xff09;传输控制协议。 是一种可靠的、面向连接的协议&#xff08;eg:打电话&#xff09;、传输效率低全双工通信&#xff08;发送缓存&接收缓存&#xff09;、面向字节流。使用TCP的应…

电子印章盖骑缝章

电子印章盖骑缝章是指在电子文档&#xff08;如PDF文件&#xff09;中&#xff0c;使用电子印章技术&#xff0c;为文档添加一个跨越多页、连续显示的电子印章图像&#xff0c;以模拟传统纸质文档上的骑缝章效果。以下是实现电子印章盖骑缝章的步骤&#xff1a; 一. 准备电子印…

docker的安装以及docker中nginx配置

机器 test3 192.168.23.103 1机器初始化配置 1.1关闭防火墙&#xff0c;清空防火墙规则 systemctl stop firewalld iptables -F setenforce 01.2部署时间同步 yum install ntp ntpdate -y1.3安装基础软件包 yum install -y wget net-tools nfs-utils lrzsz gcc gcc-c make…

读《零基础学PYthon》有感

前言&#xff1a; 2023年&#xff0c;网络安全竞赛上看见大学同学用python解出了一个谜题&#xff0c;意气风发的我也决心花钱买书把python系统的学习一遍。 结果事与愿违&#xff0c;自己抑郁了半年&#xff0c;再加上繁杂的工作让我不得不放弃计划。今年&#xff0c;我基本能…

测试的面试题

测试问题 什么是测试? 测试在生活中处处可见。 我个人认为测试尝试以达到自己期望的状态 1.2为什么需要软件测试 企业为何需要招聘大量的测试人员呢&#xff1f; 额外的花费额外的时间 企业最终的目的是“盈利” 受众群体主要是广大的使用用户&#xff0c;而用户的使用…

【webrtc】m98 RoundRobinPacketQueue的优先级处理

m98 代码 PacedSender::EnqueuePackets 的调用者可能是多个地方,所以这个要加锁保护。RoundRobinPacketQueue 本身是没有锁的发现m98和新版本不同,参考:【webrtc】m114自己实现的PrioritizedPacketQueuepush和pop都是RtpPacketToSend 但是实际上,内部是封装为QueuedPacket 处…

基于Springboot的人职匹配推荐系统

基于SpringbootVue的人职匹配推荐系统的设计与实现 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringbootMybatis工具&#xff1a;IDEA、Maven、Navicat 系统展示 用户登录 首页 企业信息 岗位信息 新闻资讯 后台管理 用户管理 企业信息管理 岗位信…