实验6 模板类、文件I/O与异常处理

news/2024/12/18 21:28:36/文章来源:https://www.cnblogs.com/hinaou/p/18613013

实验四

vector.hpp

  #pragma once#include<iostream>#include<stdexcept>using namespace std;template<typename T>class Vector {private:int size;T* ptr;public:Vector(int size, int value = 0) :size{ size } {if (size < 0) {throw length_error("negative size");}ptr = new T[size];for (int i = 0; i < size; i++) {ptr[i] = value;}}int get_size()const { return size; }T& at(int index)const {if (index < 0 || index >= size) throw out_of_range("index out of range");return ptr[index];}T& at(int index) {return static_cast<const Vector<T>*>(this)->at(index);}T& operator[](int index)const {if (index < 0 || index >= size) throw out_of_range("index out of range");return ptr[index];}T& operator[](int index) {return static_cast<const Vector<T>*>(this)->operator[](index);}};template<typename T1>void output(const Vector<T1>& v) {for (int i = 0; i < v.get_size();i++) {cout << v[i] << ", ";}cout << endl;}

test.cpp

#include <iostream>
#include "C:\Users\Administrator\Documents\Vector.hpp"void test1() {using namespace std;int n;cout << "Enter n: ";cin >> n;Vector<double> x1(n);for(auto i = 0; i < n; ++i)x1.at(i) = i * 0.7;cout << "x1: "; output(x1);Vector<int> x2(n, 42);const Vector<int> x3(x2);cout << "x2: "; output(x2);cout << "x3: "; output(x3);x2.at(0) = 77;x2.at(1) = 777;cout << "x2: "; output(x2);cout << "x3: "; output(x3);
}void test2() {using namespace std;int n, index;while(cout << "Enter n and index: ", cin >> n >> index) {try {Vector<int> v(n, n);v.at(index) = -999;cout << "v: "; output(v);}catch (const exception &e) {cout << e.what() << endl;}}
}int main() {cout << "测试1: 模板类接口测试\n";test1();cout << "\n测试2: 模板类异常处理测试\n";test2();
}

实验结果

 实验5

test.cpp

 

#include <string>
#include <vector>
#include<iomanip>
#include<algorithm>using std::string;
using std::ostream;
using std::istream;
using std::setw;
using std::setprecision;
using std::setiosflags;
using std::ios_base;class People{private:string no;string name;string major;int score;public:People()=default;~People()=default;int get_score() const{return score;} string get_string() const{return major;}friend ostream& operator<<(ostream &out, const People &c);friend istream& operator>>(istream &in, People &c);
};ostream& operator<<(ostream &out, const People &c) {out << setiosflags(ios_base::left);out << setw(15) << c.no<< setw(15) << c.name<< setw(15) << c.major<< setw(15) << c.score; return out;
}istream& operator>>(istream &in, People &c) {in >> c.no >> c.name >> c.major >> c.score;return in;
}bool compare_by_order(const People &p1,const People &p2) {if(p1.get_string()<p2.get_string())return true;if(p1.get_string()==p2.get_string())return p1.get_score()>p2.get_score();return false;
}void output(std::ostream &out, const std::vector<People> &v) {for(auto &i: v)out << i << std::endl;
}void save(const std::string &filename, std::vector<People> &v) {using std::ofstream;ofstream out(filename);if(!out.is_open()) {std::cout << "fail to open file to write\n";return;}output(out, v);out.close();
}void load(const std::string &filename, std::vector<People> &v) {using std::ifstream;ifstream in(filename);if(!in.is_open()) {std::cout << "fail to open file to read\n";return;
}
std::string title_line;
getline(in, title_line); 
People t;
while(in >> t)v.push_back(t);in.close();
}void test(){using namespace std;vector<People> v;load("data5.txt",v);sort(v.begin(),v.end(),compare_by_order);output(cout,v);save("ans5.txt",v); 
}int main(){test();
}

实验结果

 

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

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

相关文章

把半年前完全没思路的题解了的感觉真好

虽然处理了很多次索引思路,不过最后还是过了。第一眼就有解题思路,这种感觉真不错,要的就是这种打怪升级的正反馈。 附上解题代码 `# @lc app=leetcode.cn id=2266 lang=python3[2266] 统计打字方案数@lc code=start from collections import Counter from functools import…

【Windows安全】13种回调函数执行ShellCode

#windows #回调函数 回调机制 在我们使用回调函数执行Shellcode之前,我们首先需要去了解Windows回调机制,Windows回调机制就像你和你的助手一样,比如说每一个律师所中的每一个律师都有一个实习助手,律师需要助手在特定的情况下去处理一些特殊的任务,但这些任务并不是日常…

MaLoader:一款基于Tauri+Rust的免杀马生成工具

免责声明 本公众号“黑客之道HackerWay”提供的资源仅供学习,利⽤本公众号“黑客之道HackerWay”所提供的信息而造成的任何直接或者间接的后果及损失,均由使⽤者本⼈负责,本公众号“黑客之道HackerWay”及作者不为此承担任何责任,一旦造成后果请自行承担责任!简介 MaLoade…

Element Plus组件库el-select组件多选回显踩坑

前情公司有经常需要做一些后台管理页面,我们选择了Element Plus,它是基于 Vue 3,面向设计师和开发者的组件库,是Vue框架生态中比较火的UI组件库,组件库丰富易用,组件链接:一个 Vue 3 UI 框架 | Element Plus,项目中经常会用到el-select多选功能,组件自带的多选交互也是…

Transformers 框架 Pipeline 任务详解(四):问答(question-answering)

本文深入介绍了 Transformers 框架中的 question-answering 任务,涵盖任务简介、应用场景如智能助手和客户服务、任务配置与模型选择、实战代码示例,以及如何利用 Gradio 创建 WebUI 界面,使用户能通过浏览器实时获取问答结果。文章旨在帮助读者快速掌握使用 Transformers 构…

docker高级篇(大厂进阶):安装mysql主从复制

docker高级篇(大厂进阶):安装mysql主从复制@目录1.Docker复杂安装详说1.1安装mysql主从复制本人其他相关文章链接 1.Docker复杂安装详说 1.1安装mysql主从复制主从搭建步骤: 1)新建主服务器容器实例3307 2)进入/mydata/mysql-master/conf目录下新建my.cnf 3)修改完配置后…

Bugku-CTF getshell

前几天在打2024 长城杯 & 国赛时发现的一道类似题题目:<?php define(pfkzYUelxEGmVcdDNLTjXCSIgMBKOuHAFyRtaboqwJiQWvsZrPhn, __FILE__); $cPIHjUYxDZVBvOTsuiEClpMXAfSqrdegyFtbnGzRhWNJKwLmaokQ = urldecode("%6E1%7A%62%2F%6D%615%5C%76%740%6928%2D%70%78%7…

无锡在线教育系统开发怎么样

无锡在线教育系统的开发作为当前教育领域内的一种创新方式,正在逐渐受到更多人的重视和应用。从现有的数据来看,它不仅提升了教学质量和学习的灵活性,还能在很大程度上降低运营和维护成本。那么,究竟这种开发状况是怎样的,接下来我们深入了解一下其发展情况及前景。来自ww…

Obfuscar:一款针对.NET程序的开源代码混淆工具

关于Obfuscar Obfuscar是一款针对.NET程序的开源代码混淆工具,该工具支持使用大量重载将 .NET 程序集中的元数据(包括方法、属性、事件、字段、类型和命名空间的名称)重命名为最小集合,在大多数情况下仅通过签名即可区分。 例如,如果某个类仅包含接受不同参数的方法,则可…

批量数据传入数据库方法方案

前端处理好的数据,不是1笔2笔的问题,而是每次几笔或是大批量数据传入数据库。实际上,还是讲求效率与性能。在Insus.NET的博客中,找到几篇以前的随笔,1 使用SqlBulkCopy导入数据至MS SQL Server https://www.cnblogs.com/insus/p/3779879.html 2 ASP.NET MVC一次删除多…

玩家结构体和枚举

玩家结构体包含了玩家类型,玩家位置,玩家初始化构造函数还有画自己的函数方法玩家结构体 enum E_PlayerType//玩家类型的枚举 {Player,Robot, } struct Player {public E_PlayerType type;//用地图上的索引代替坐标public mapIndex;public Player(int index,E_PlayerType typ…