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

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

时间:2024-12-22 09:47:34浏览次数:3  
标签:文件 return cout int Vector 实验 size 模板 out

任务4:

Vector.hpp

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 template <typename T>
 4 class Vector{
 5     public:
 6         Vector(int size,int value=0):size{size}{
 7             if(size<0) throw length_error("negative size");
 8             else{
 9                 ptr=new T[size];
10                 for(int i=0;i<size;i++){
11                     ptr[i]=value;
12                 }
13             }
14         }
15         int get_size() const{
16             return size;
17         }
18         T& at(int val){
19             if(val>=size) throw out_of_range("index out of range");
20             else  return ptr[val];
21         }
22         T& operator[] (int val){
23             if(val<0||val>=size)  throw out_of_range("index out of range");
24             else return ptr[val];
25         }
26         friend void output(const Vector<T> &x){
27             for(int i=0;i<x.get_size();i++){
28                 cout<<x.ptr[i]<<", ";
29             }
30             cout<<endl;
31         }
32         Vector(const Vector<T>& x):size(x.size),ptr(new T[size]){
33             for(int i=0;i<size;i++){
34                 ptr[i]=x.ptr[i];
35             }
36         }
37     private:
38         int size;
39         T* ptr;
40 };
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

运行结果截图:

 

任务5:

task5.cpp

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 class student{
 4     private:
 5         string name;
 6         string number;
 7         int grade;
 8         string major;
 9     public:
10         student()=default;
11         ~student()=default;
12         string get_major() const{
13             return major;
14         }
15         int get_grade() const{
16             return grade;
17             
18         }
19         friend ostream& operator<<(ostream &out,const student &s){
20             out<<setiosflags(ios_base::left);
21             out<<setw(15)<<s.number<<setw(15)<<s.name<<setw(15)<<s.major<<setw(15)<<s.grade;
22             return out;
23         }
24         friend istream &operator>>(istream &in,student &s){
25             in>>s.number>>s.name>>s.major>>s.grade;
26             return in;
27         }
28 };
29 
30 void ld(const string &filename,vector<student> &s){
31     ifstream in(filename);
32     if(!in.is_open())
33     {
34       cout<<"file open read\n";
35       return ;
36     }
37       string title_line;
38       getline(in,title_line);
39       student t;
40       while(in>>t)
41         s.push_back(t);
42       in.close();
43 }
44 
45 void output(ostream &out,const vector<student> &s){
46     for(auto& i:s)
47       out<<i<<endl;
48 }
49 
50 void ew(const string &filename,vector<student> &s){
51     ofstream out(filename);
52     if(!out.is_open()){
53         cout<<"file open write\n";
54         return ;
55         
56     }
57     output(out,s);
58     out.close();
59 }
60 
61 
62 bool compare(student &s1,student &s2){
63     if(s1.get_major()<s2.get_major())  return true;
64     if(s1.get_major()==s2.get_major())  return s1.get_grade()>s2.get_grade();
65     return false;
66 }
67 int main(){
68     vector<student> s;
69     ld("data5.txt",s);
70     sort(s.begin(),s.end(),compare);
71     output(cout,s);
72     ew("data5_2.txt",s);
73 }
74  
View Code

运行结果截图:

实验总结:通过这次实验,加深了对模板类使用的理解。

标签:文件,return,cout,int,Vector,实验,size,模板,out
From: https://www.cnblogs.com/yhjXW/p/18621775

相关文章

  • 任意文件下载漏洞分析
    一、漏洞简介​app/adminapi/controller/v1/setting/SystemConfig.php​路由中存在任意文件下载漏洞二、影响版本<=v5.4.0三、环境搭建配置phpstudy,将网站的运行目录,设置在public​目录下设置伪静态四、漏洞原理分析该系统采用前后端分离技术,基于ThinkPHP6+eleme......
  • 嵌入式Linux,proc文件系统讲解,介绍以及读取使用
    1.简介         proc文件系统是一个虚拟文件系统,它以文件系统的方式为应用层访问系统内核数据提供了接口,用户和应用程序可以通过proc文件系统得到系统信息和进程相关信息,对proc文件系统的读写作为与内核进行通信的一种手段。但是与普通文件不同的是,proc文......
  • pta 7-363 sdut-C语言实验-简单字符串排序
    题解:#include<iostream>#include<string>usingnamespacestd;//定义学生结构体structstudent{stringname;intscore;};//快速排序实现单词字典序排序voidQuickSort(studentstu[],intleft,intright){if(left>=right)return;inti=left,j=r......
  • Pyqt6在lineEdit中输入文件名称并创建或删除JSON文件
    1、创建JSON文件代码importosdefaddModulekeyWordFile(self):if""!=self.lineEdit_module.text():moduleFile=self.lineEdit_module.text()+'.json'else:self.toolLogPrinting('请输入模块名称')returnfile......
  • 实验6
    task4代码:#pragmaonce#include<iostream>#include<stdexcept>#include<iomanip>//模板类Vector的定义template<typenameT>classVector{public://构造函数Vector(intsize);Vector(intsize,Tvalue);Vector(const......
  • 实验六
    任务四 源代码:#include<stdio.h>#defineN10typedefstruct{charisbn[20];charname[80];charauthor[80];doublesales_price;intsales_count;}Book;voidoutput(Bookx[],intn);voidsort(B......
  • 操作系统(20)文件共享
    前言    操作系统文件共享是指在不同设备或用户之间共享文件的功能,它使得多个用户或设备能够方便地访问、编辑和共享文件。一、文件共享的作用提高协作效率:文件共享允许团队成员之间方便地共享和编辑文件,从而提高协作效率。节省存储空间:通过文件共享,多个用户或设......
  • 操作系统(19)文件目录
    前言    操作系统中的文件目录是组织和存储文件的关键组成部分,它使得操作系统能够有效地对文件实施统一管理。一、文件目录的作用    文件目录的主要作用是将文件名转换为文件在外存的物理位置。用户通过文件名来访问文件,而文件目录则提供了文件名与文件物......
  • 实验6 模板类、文件I/O和异常处理
    实验任务1-3:验证性实验。无需写入实验博客文档。 已亲自动手实践。实验任务4:1#pragmaonce2#include<iostream>3#include<stdexcept>4usingnamespacestd;5template<typenameT>6classVector{7private:8intsize;9T*dat......
  • CHM助手 >> 使用说明 >> 步骤4:制作帮助文件大纲
      1CHM助手使用说明>>步骤4:制作帮助文件大纲1.1概述  使用一般的CHM帮助文件制作工具写作CHM文档时,也需要编写大纲(目录),它们的写作形式一般如下:逐个创建:由用户手工逐个创建目录节点,并绑定html文件导入文件:部分软件提供了导入文件功能,导入后节点与html已经绑定......