首页 > 其他分享 >实验6 模版类、文件I/O和异常处理

实验6 模版类、文件I/O和异常处理

时间:2024-12-24 15:13:32浏览次数:8  
标签:文件 const index int 模版 Vector 实验 template size

1. 实验任务4 Vector.hpp源代码  

 1 #pragma once
 2 #include <iostream>
 3 #include <stdexcept>
 4 using namespace std;
 5 
 6 template <typename T>
 7 class Vector {
 8 public:
 9     Vector(int size);
10     Vector(int size, T value);
11     Vector(const Vector<T>& other);
12     ~Vector();
13     int get_size() const;
14     T& at(int index);
15     const T& at(int index) const;
16     T& operator[](int index);
17     const T& operator[](int index) const;
18     template <typename U>
19     friend void output(const Vector<U>& v);
20 private:
21     int size;
22     T* data;
23 };
24 template <typename T>
25 Vector<T>::Vector(int size) : size(size) {
26     if (size < 0) throw std::length_error("Vector constructor: negative size");
27     data = new T[size]{};
28 }
29 template <typename T>
30 Vector<T>::Vector(int size, T value) : size(size) {
31     if (size < 0) throw std::length_error("Vector constructor: negative size");
32     data = new T[size];
33     for (int i = 0; i < size; ++i) data[i] = value;
34 }
35 template <typename T>
36 Vector<T>::Vector(const Vector<T>& other) : size(other.size) {
37     data = new T[size];
38     for (int i = 0; i < size; ++i) data[i] = other.data[i];
39 }
40 template <typename T>
41 Vector<T>::~Vector() {
42     delete[] data;
43 }
44 template <typename T>
45 int Vector<T>::get_size() const {
46     return size;
47 }
48 template <typename T>
49 T& Vector<T>::at(int index) {
50     if (index < 0 || index >= size) throw std::out_of_range("Vector: index out of range");
51     return data[index];
52 }
53 template <typename T>
54 const T& Vector<T>::at(int index) const {
55     if (index < 0 || index >= size) throw std::out_of_range("Vector: index out of range");
56     return data[index];
57 }
58 template <typename T>
59 T& Vector<T>::operator[](int index) {
60     return at(index);
61 }
62 template <typename T>
63 const T& Vector<T>::operator[](int index) const {
64     return at(index);
65 }
66 template <typename U>
67 void output(const Vector<U>& v) {
68     for (int i = 0; i < v.size; ++i) {
69         std::cout << v.data[i] << " ";
70     }
71     std::cout << std::endl;
72 }
View Code

 

task4.cpp源代码
 1 #include <iostream>
 2 #include "Vector.hpp"
 3 
 4 void test1() {
 5     using namespace std;
 6 
 7     int n;
 8     cout << "Enter n: ";
 9     cin >> n;
10     
11     Vector<double> x1(n);
12     for(auto i = 0; i < n; ++i)
13         x1.at(i) = i * 0.7;
14 
15     cout << "x1: "; output(x1);
16 
17     Vector<int> x2(n, 42);
18     const Vector<int> x3(x2);
19 
20     cout << "x2: "; output(x2);
21     cout << "x3: "; output(x3);
22 
23     x2.at(0) = 77;
24     x2.at(1) = 777;
25     cout << "x2: "; output(x2);
26     cout << "x3: "; output(x3);
27 }
28 
29 void test2() {
30     using namespace std;
31 
32     int n, index;
33     while(cout << "Enter n and index: ", cin >> n >> index) {
34         try {
35             Vector<int> v(n, n);
36             v.at(index) = -999;
37             cout << "v: "; output(v);
38         }
39         catch (const exception &e) {
40             cout << e.what() << endl;
41         }
42     }
43 }
44 
45 int main() {
46     cout << "测试1: 模板类接口测试\n";
47     test1();
48 
49     cout << "\n测试2: 模板类异常处理测试\n";
50     test2();
51 }
View Code

 

运行测试截图

 

2. 实验任务5 task5.cpp源码  
 1 #include <iostream>
 2 #include <fstream>
 3 #include <string>
 4 #include <vector>
 5 #include <algorithm>
 6 #include <iomanip>
 7 using namespace std;
 8 class Student {
 9 public:
10     int id;
11     string name;
12     string major;
13     int score;
14     friend istream& operator>>(istream& in, Student& s);
15     friend ostream& operator<<(ostream& out, const Student& s);
16 };
17 istream& operator>>(istream& in, Student& s) {
18     in >> s.id >> s.name >> s.major >> s.score;
19     return in;
20 }
21 ostream& operator<<(ostream& out, const Student& s) {
22     out << left << setw(10) << s.id
23         << setw(10) << s.name
24         << setw(10) << s.major
25         << fixed << setprecision(2) << s.score;
26     return out;
27 }
28 int main() {
29     vector<Student> students;
30     const string input_file = "data5.txt";
31     const string output_file = "ans5.txt";
32     ifstream infile(input_file);
33     ofstream outfile(output_file);
34     string header;
35     getline(infile, header);
36     Student temp;
37     while (infile >> temp) {
38         students.push_back(temp);
39     }
40     infile.close();
41     sort(students.begin(), students.end(), [](const Student& a, const Student& b) {
42         if (a.major == b.major) return a.score > b.score;
43         return a.major < b.major;
44         });
45     for (const auto& s : students) {
46         cout << s << endl;
47         for (const auto& s : students) {
48             outfile << s << endl;
49         }
50         outfile.close();
51     }
52     return 0;
53 }
View Code

 

运行结果截图

 

标签:文件,const,index,int,模版,Vector,实验,template,size
From: https://www.cnblogs.com/CHENSHAOQIU/p/18625332

相关文章

  • 实验6
    实验六实验任务4task4.cpp#include<iostream>#include"vector.hpp"voidtest1(){usingnamespacestd;intn;cout<<"Entern:";cin>>n;Vector<double>x1(n);for(autoi=0;i<n;++i)x1.at(i)=i*0.7;co......
  • 找不到pwrshsip.dll文件或pwrshsip.dll文件丢失该怎么办?
    在大部分情况下出现我们运行或安装软件,游戏出现提示丢失某些DLL文件或OCX文件的原因可能是原始安装包文件不完整造成,原因可能是某些系统防护软件将重要的DLL文件识别为可疑,阻止并放入了隔离单里,还有一些常见的DLL文件缺少是因为系统没有安装齐全的微软运行库,还有部分情况是因为......
  • 学习高校课程-软件设计模式-状态、策略和模版模式(lec12)
    State:ProblemAfinitenumberofstatesTheprogrambehavesdifferentlywithinastateCanbeswitchedfromonestatetoanother,andswitchingrules(transitions)arealsofiniteandpredetermined有限数量的状态程序在某个状态下的行为有所不同可以从一种状态......
  • 在 Windows 系统中,DISM(Deployment Imaging Service and Management Tool)用于服务和管
    在Windows系统中,DISM(DeploymentImagingServiceandManagementTool)用于服务和管理Windows映像文件,包括安装、配置和修复Windows操作系统。DISM提供了不同的会话模式,其中“多个会话”和“单个会话”是两种常见的操作模式。它们在执行任务时有所不同,下面是它们的对比:......
  • 视频流媒体播放器EasyPlayer-RTSP原始录像文件被新录像文件覆盖是什么原因
    媒体播放器EasyPlayer有很多版本,其中EasyPlayer-RTSP就是能够输出RTSP视频流的版本,由于RTSP的需求众多,因此RTSP版本的用户也是很广泛。EasyPlayer-RTSP录像文件被覆盖EasyPlayer-RTSP是可以进行录像的,在录制录像文件时会出现开始录像后产生一个录像文件,停止录像后,录像文件被保存......
  • .MUI 文件是 Multilingual User Interface(多语言用户界面)文件的扩展名。它们是 Window
    什么是 .MUI 文件?.MUI文件是MultilingualUserInterface(多语言用户界面)文件的扩展名。它们是Windows操作系统用于支持多语言界面的文件。每个.MUI文件包含了特定语言版本的用户界面资源,如菜单项、对话框文本、按钮标签等,确保操作系统和应用程序能够以不同的语言显示界面......
  • 实验六c++
    实验任务四源代码Vector.hpp1#include<iostream>2#include<stdexcept>3usingnamespacestd;45template<typenameT>6classVector{7public:8Vector(intn);9Vector(intn,Ta);10Vector(constVector<T>&......
  • 文件上传漏洞实战
    1.hackme靶场实战进入到kali虚拟机,同时进入漏洞虚拟机,目录扫描kali虚拟机,扫描到靶机IP地址,进入到页面注册账号并登录页面,验证sql注入,得到MD5加密的编码,使用工具解码得到账号和密码为superadmin:Uncrackable登录账号,上传一个一句话木马的php文件御剑扫描得到一个upl......
  • 文件解析漏洞靶场实战
    1.IIS6.X安装windows2003和IIS6.X环境,进入inetpub/wwwroot目录下,创建一个.asp后缀的文件创建一个后缀为.jpg的文件,写入一句话,显示当前时间查看IP地址,在浏览器访问.jpg文件2.IIS7.X开启IIS7.X,并修改php.ini里面的配置文件修改windows系统中的IIS服务,并重启PHPstudy......
  • 探索Dedoc:文件解析的强大工具
    探索Dedoc:文件解析的强大工具引言解析和提取各类文档格式中的信息是开发业务应用程序时的常见需求。Dedoc是一个开源库和服务,能够从多种文件格式中提取文本、表格、附加文件和文档结构。这篇文章将介绍Dedoc的功能,如何安装和使用Dedoc库和API,以及一些常见的使用问题和解决......