首页 > 编程语言 >实验六c++

实验六c++

时间:2024-12-24 13:43:32浏览次数:3  
标签:const int c++ Vector 实验 return include ptr

实验任务四

源代码

Vector.hpp

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

task.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 }

运行结果截图

实验任务五

源代码

data5.hpp

 1 #pragma once
 2 #include<iostream>
 3 #include<iomanip>
 4 #include<string>
 5 
 6 using namespace std;
 7 
 8 class Student {
 9 public:
10     Student() = default;
11     ~Student() = default;
12     string getcourse()const { return course; }
13     int getso()const { return score; }
14 
15     friend ostream& operator<<(ostream& out, const Student& s);
16     friend istream& operator>>(istream& in, Student& s);
17 private:
18     int num;
19     string name;
20     string course;
21     int score;
22 
23 };
24 
25 ostream& operator<<(ostream& out, const Student& s) {
26     out << left;
27     out << setw(15) << s.num
28         << setw(15) << s.name
29         << setw(15) << s.course
30         << setw(15) << s.score;
31     return out;
32 }
33 istream& operator>>(istream& in, Student& s) {
34     in >> s.num >> s.name >> s.course >> s.score;
35     return in;
36 }

sort.cpp

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<fstream>
 4 #include<string>
 5 #include"data5.hpp"
 6 #include<vector>
 7 
 8 using namespace std;
 9 bool compare_by_so(const Student& s1, const Student& s2) {
10     if (s1.getcourse() > s2.getcourse())
11         return true;
12     if (s1.getcourse() == s2.getcourse())
13         return s1.getso() > s2.getso();
14 
15     return false;
16 }
17 
18 void output(ostream& out, const vector<Student>& v) {
19     for (auto& i : v)
20         out << i << endl;
21 }
22 
23 void save(const string& filename, vector<Student>& v) {
24     ofstream out(filename);
25     if (!out.is_open()) {
26         cout << "fail to open file to write\n";
27         return;
28     }
29 
30     output(out, v);
31     out.close();
32 }
33 
34 void load(const string& filename, vector<Student>& v) {
35     ifstream in(filename);
36     if (!in.is_open()) {
37         cout << "fail to open file to write\n";
38         return;
39     }
40 
41     string title;
42     getline(in, title);
43 
44     Student s;
45     while (in >> s)
46         v.push_back(s);
47     in.close();
48 }
49 void test() {
50     using namespace std;
51 
52     vector<Student> v;
53 
54     load("data5.txt", v);
55     sort(v.begin(), v.end(), compare_by_so);
56     output(cout, v);
57     save("ans5.txt", v);
58 }
59 
60 int main() {
61     test();
62 }

运行结果截图

 

标签:const,int,c++,Vector,实验,return,include,ptr
From: https://www.cnblogs.com/hxqbbimoshuchou666/p/18627224

相关文章

  • 模拟法练习C++ 2
    1. 陶陶摘苹果题目描述陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。现在已知10个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高......
  • 模拟法练习C++ 1
    有错请指出!对于模拟法,百度定义是其实,没有这么麻烦,也就是题目是什么,我们就怎么写,也可以说它是不是算法的算法,最好把代码模块化特点:1.题目简单,代码量很大2.不好找错误3.在比赛中经常考 4.代码灵活下面是几道例题1.扑克游戏题目描述三张扑克牌比大小,每个人从扑克牌中......
  • C++函数重载
    #include<stdio.h>classTimer{public:Timer(){min=0;sec=0;}voidadd(intsec){this->sec+=sec;}voidshow(){printf(&qu......
  • 真题-2021年南海区C++组真题
    这套题包含了历年真题,十分重要!!!!要考试的同学可以参考一下!!此套题限时3小时。#A.NH.2021.01.笨鸟先飞题目描述多多是一只小菜鸟,都说笨鸟先飞,多多也想来个菜鸟先飞。于是它从0点出发,一开始的飞行速度为1米/秒,每过一秒多多的飞行速度比上一秒的飞行速度快2米/秒,问n秒......
  • 实验6 模板类、文件I/O和异常处理
    任务1:task1.cpp1Complex.hpp:2#pragmaonce34#include<iostream>5#include<stdexcept>67//声明8////////////////////////////////////////////////////9//复数模板类声明10template<typenameT>11classComplex{......
  • (2024最新毕设合集)基于SpringBoot的小说在线阅读网咖+86615|可做计算机毕业设计JAVA、P
    目 录摘要1绪论1.1 选题背景1.2研究内容1.3本文的组织结构2相关技术介绍2.1MySQL数据库2.2Java编程语言2.3SpringBoot框架介绍3 系统需求分析与设计3.1可行性分析3.1.1技术可行性分析3.1.2经济可行性分析3.1.3法律可行性分析3.2需......
  • 实验6
    test:点击查看代码#pragmaonce#include<iostream>#include<stdexcept>usingnamespacestd;template<typenameT>classVector{public:Vector(intn,intvalue=0);Vector(Vector<T>&v);~Vector();intget_......
  • 最直接真实的药物靶点筛选实验——LiP-MS药物靶点筛选技术
    有限蛋白水解质谱技术(LimitedProteolysisMassSpectrometry,LiP-MS)是研究小分子化合物(天然产物、代谢物等)与蛋白质相互作用,揭示蛋白结构动态变化的高通量质谱筛选技术。本公司推出LiP-MS药物靶点筛选解决方案,包含三种研究目的场景LiP-MS药物靶点筛选:体外生理条件下寻找小分......
  • 实验6 模板类,文件I/O及异常处理
    一实验目的练习编写模板函数、模板类,从多态角度理解模板函数和模板类(类型作为参数)体验标准I/O流类、文件I/O流类、字符串I/O流类的用法,能正确使用针对问题场景,使用流类库对I/O数据进行格式化和读、写操作体验异常处理的基础用法,能解释异常处理的机制和流程训练综合应用类的......
  • 面向教学科研智能网联汽车仿真测试实验室
    概述    随着智能网联汽车的蓬勃发展,高校培养相关人才的需求日益迫切。然而,传统教学设备难以满足实际工程应用需求,限制了学生实践能力和科研创新。为此,经纬恒润推出高校智能网联汽车仿真测试解决方案,为高校提供与产业接轨的全栈式解决方案,助力科研项目、人才培养和教学模......