首页 > 其他分享 >实验六 模板类,文件I/O和异常处理

实验六 模板类,文件I/O和异常处理

时间:2024-12-16 17:22:06浏览次数:3  
标签:文件 return index int 实验 include ptr 模板 size

任务4

代码:

Vector.hpp:

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

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     x2.at(0) = 77;
21     x2.at(1) = 777;
22     cout << "x2:"; output(x2);
23     cout << "x3:"; output(x3);
24 }
25 
26 void test2() {
27     using namespace std;
28 
29     int n, index;
30     while (cout << "Enter n and index:", cin >> n >> index) {
31         try {
32             Vector<int>v(n, n);
33             v.at(index) = -999;
34             cout << "v:"; output(v);
35         }
36         catch (const exception& e) {
37             cout << e.what() << endl;
38         }
39     }
40 }
41 
42 int main() {
43     std::cout << "测试1:模板类接口测试\n";
44     test1();
45 
46     std::cout << "\n测试2:模板类异常处理测试\n";
47     test2();
48 }

运行结果:

任务5

代码:

 1 #include<iostream>
 2 #include<fstream>
 3 #include<string>
 4 #include<vector>
 5 #include<iomanip>
 6 #include<algorithm>
 7 
 8 using namespace std;
 9 
10 class student{
11 public:
12     student() = default;
13     ~student() = default;
14 
15     string get_major()const {
16         return major;
17     }
18     
19     int get_score()const {
20         return score;
21     }
22 
23     friend ostream& operator<<(ostream& out, const student& s) {
24         out << setiosflags(ios_base::left);
25         out << setw(10) << s.number
26             << setw(10) << s.name
27             << setw(10) << s.major
28             << setw(10) << s.score;
29 
30         return out;
31     }
32 
33     friend istream& operator>>(istream& in,  student& s) {
34         in >>s.number >> s.name >> s.major >> s.score;
35 
36         return in;
37     }
38 
39 private:
40     string number;
41     string name;
42     string major;
43     int score;
44 
45 };
46 
47 bool compare(const student& s1, const student& s2) {
48     if (s1.get_major() < s2.get_major())
49         return true;
50 
51     if (s1.get_major() == s2.get_major())
52         return s1.get_score() > s2.get_score();
53 
54     return false;
55 }
56 
57 void output(ostream& out, const vector<student>& v) {
58     for (auto& i : v)
59         out << i << endl;
60 }
61 
62 void save(const string& filename, vector<student>& v) {
63     ofstream out(filename);
64     if (!out.is_open()) {
65         cout << "fail to open file to write\n";
66         return;
67     }
68 
69     output(out, v);
70     out.close();
71 }
72 
73 void load(const string& filename, vector<student>& v) {
74     ifstream in(filename);
75     if (!in.is_open()) {
76         cout << "fail to open to read\n";
77         return;
78     }
79 
80     string title_line;
81     getline(in, title_line);
82 
83     student t;
84     while (in >> t)
85         v.push_back(t);
86 
87     in.close();
88 }
89 
90 int main() {
91     vector<student>v;
92 
93     load("data5.txt", v);
94     sort(v.begin(), v.end(), compare);
95     output(cout, v);
96     save("ans5.txt", v);
97 }

运行结果:

 

标签:文件,return,index,int,实验,include,ptr,模板,size
From: https://www.cnblogs.com/sqmylc/p/18610664

相关文章

  • 实验六
    任务4:代码:#pragmaonce#include<iostream>#include<stdexcept>usingnamespacestd;template<typenameT>classVector{public:Vector(intn,constT&value=T()):size(n){if(n<0){......
  • Win11系统电脑d3dx9_43.dll丢失?d3dx9_43.dll文件找不到的修复方法
    在使用Win11电脑的过程中,不少用户可能会遇到d3dx9_43.dll文件丢失的问题,这可能会导致一些游戏或应用程序无法正常运行,给我们的使用带来诸多不便。不过别担心,下面就为大家详细介绍几种解决该问题的有效方法。一、重新安装相关程序或游戏许多时候,d3dx9_43.dll文件丢失是......
  • sumo——相关地图文件格式转换
    netconvertxodr转net.xml格式使用netconvert命令转换netconvert--opendrive-filescaoyang.xodr-ocaoyang.net.xml使用工具类将caoyang.net.xml转caoyang.geojsonpackagecom.ys.test.netxml_to_geojson;importorg.w3c.dom.*;importjavax.xml.parsers.*;impor......
  • Python 文件查重工具
    Python文件查重工具——循环删除重复文件1.简介:这是一个Python文件去重的工具,市面上很多检测重复工具的软件,都是要付费或者要破解的。于是就想着能不能自己做一个后台每时每刻都可以自己去重的工具。虽然市面上很多检测重复工具的软件.但是这个工具使用环境和那些工具......
  • [SAP ABAP] 上传CSV文件到内表
    CSV文件数据测试数据.csv上传csv文件到内表的开发步骤:①选择屏幕以及上传文件的相关参数设置②获取上传的CSV文件数据行自定义的csv文件,编码格式是utf-8,但是使用GUI_UPLOAD函数读取文件数据,会出现中文乱码,因此需要给形参codepage指定编码格式'8400'③......
  • 实验六
    任务四#include<stdio.h>#include<stdlib.h>#defineN10typedefstruct{charisbn[20];//isbn号charname[80];//书名charauthor[80];//作者doublesales_price;//售价intsales_count;//销售册数}Book;voidoutput(Bookx[],intn);voidsort(Boo......
  • 24-bit 音频 与 16-bit 音频 的对比,主要通过表格形式展示它们的不同:24 bit 是指音频文
    在音频领域,16-bit、24-bit、32-bit和64-bit已经是常见的位深,这些位深代表了音频的动态范围和精度。但如果我们进一步探讨是否存在更高的位深或是否有更高的标准,可以从几个方面来回答。1. 64-bit及更高的位深在理论上,音频位深是没有固定上限的,您可以定义更高的位深,比如128-b......
  • node升级为22.*后,npm不可用,npm:无法加载文件
    错误信息如下: 一、打开终端: 二、此由本地策略组引发,可通过命令查看策略:Get-ExecutionPolicy-List如结果都显示Undefined,那代表没有设置安全策略   三、使用以下命令来更改执行策略为RemoteSigned并设置为作用于当前用户Set-ExecutionPolicy-scopeCurren......
  • 实验6
    Task4源代码#include<stdio.h>#defineN10typedefstruct{charisbn[20];//isbn号charname[80];//书名charauthor[80];//作者doublesales_price;//售价intsales_count;//销售册数}Book;......
  • 实验6 C语言结构体、枚举应用编程
    一、实验目的 能正确定义结构体类型能正确定义结构体变量,会对其进行初始化,访问,赋值,输入或输出能正确定义结构体数组,会对其进行初始化,访问,赋值,输入或输出能正确定义结构体指针变量,会使用其间接访问结构体变量,结构体数组初步体验链表的创建,遍历及插入节点操作能综合应用结构......