实验六c++

实验任务四

源代码

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 }

运行结果截图

 

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

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

相关文章

10款装了不后悔的高效PC软件,桌面便签、日历、录屏、搜索……

在使用Win电脑办公时,一些简单高效的工具软件可以让工作事半功倍!今天就来介绍10款装了不后悔的软件! 1、浏览器:夸克 电脑浏览器,除了电脑自带的edge,还可以试试夸克,它有自带的网盘,可以保存重要的资料,在手机端也可以同步使用。2、桌面便签+待办+日历:敬业签 在电…

Win10 系统安装 Linux 子系统教程(WSL2 + Ubuntu 20.04 + xlaunch桌面 )

安装 WSL 1 安装 WSL1 (1)启用“适用于 Linux 的 Windows 子系统”可选功能 需要先启用“适用于 Linux 的 Windows 子系统”可选功能,然后才能在 Windows 上安装 Linux 分发。可以使用命令行的方式,也可以使用图形界面的方式。 图形界面方式 在【设置 -> 更新与安全->…

#渗透测试 kioptix level 2靶机通关教程及提权

声明! 文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!工具链接:https://pan.quark.cn/s/530656ba5503 一、准备阶段 复现请将靶机ip换成自己的kali: 192.168.108.130 靶机:192.168.108.1361. 找出ip端口…

【日记】财经绞肉机(1037 字)

正文我真诚地希望,每年年底的时候,谁能把我一棒子敲晕,让我在 1 月 1 日元旦的时候准时醒来,这样我就不用度过年底这段疯狂忙碌的日子了。这段时间大家都是肉眼可见的忙碌,但老搭档柜面主管除外,她刚好轮岗。新的柜面主管又必须培训一周才能上岗。看起来两个人都煞是清闲…

微软edge浏览器 v131.0.2903.99便携版

点击上方蓝字睿共享关注我 前言 Microsoft Edge浏览器是个新浏览器,它用起来很简单,界面也很清爽。这个浏览器功能特别多,里面还带了微软的小助手Contana,能帮用户做不少贴心的事儿。它支持安装各种小工具(插件),还能在网页上做标记。而且,管理网页标签也变得很容易,不…

Ubuntu22.04 LTS 安装nvidia显卡驱动

准备跑老师给定的Github上的多模态源码,但是用了这么久ubuntu还没有尝试过安装nvidia驱动,好在也是一次成功,于是记录下来。 借鉴的是https://blog.csdn.net/Eric_xkk/article/details/131800365这篇文章,按照流程来基本没有问题,不过个人觉得有些步骤比较冗余,所以记录下…

中年程序员的新赛道:摆摊?(附赠原味牛杂和卤味摆摊教程)

中年程序员的职业困境在当今竞争激烈的职场环境中,中年程序员面临着诸多挑战。随着年龄的增长,身体机能逐渐下降,长时间的高强度工作变得越发吃力。与此同时,职场的竞争压力却丝毫未减,年轻一代程序员如雨后春笋般涌现,他们往往对新技术有着更敏锐的洞察力和更快的学习速…

E91 换根DP P3647 [APIO2014] 连珠线

视频链接:E91 换根DP P3647 [APIO2014] 连珠线_哔哩哔哩_bilibili P3647 [APIO2014] 连珠线 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)// 换根DP O(n) #include <iostream> #include <cstring> #include <algorithm> #include <vector> usin…

KeilV5在线找器件支持包

在keil软件中选择Pack installer 进入之后,会自动获取软件最新的包列表。速度较慢,需要长时间等待

WSL2 ubuntu18.04 使用xfce4时Xlaunch黑屏问题以及解决,X server already running on display 10.255.255.254:0

显示xfce4 启动成功却没有画面显示 在Ubuntu终端输入 startxfce4 启动X服务时,显示:/usr/bin/startxfce4: X server already running on display 10.255.255.254:0,且Xlaunch黑屏无输入。如图所示:分析原因:出现X server already running on display 10.255.255.254:0 说…

Java 实战项目:Spring Boot + MyBatis Plus + MySQL + Shiro + Thymeleaf 赋能仓库管理系统设计与实现

1. 项目概述 本仓库管理系统旨在实现对仓库中商品、供应商、客户、员工、权限、日志等信息的有效管理,提升仓库运营效率和管理水平。系统主要功能包括基础数据管理、进货管理、销售管理、库存管理、系统管理等。 2. 系统架构 2.1技术选型后端:Spring Boot + MyBatis Plus + M…

.NET Freamework 创建windows 服务

使用.NET Freamework 创建windows 服务 今天有需求需要新写一个windows 服务,发现资料找不到了。顺着模板一点一点写,需要对照微软的资料。这里自己重新整理一份,由于不需要使用跨平台,所以我还是使用.NET Framework 4.8下的windows 服务。微软文档地址如下: 如何:创建 W…