实验六 C++

news/2024/12/21 18:21:41/文章来源:https://www.cnblogs.com/gzry/p/18621022

任务四:

Vector.hpp:

#pragma once
#ifndef VECTOR_HPP
#define VECTOR_HPP#include <iostream>
#include <stdexcept> // 为异常类提供支持
#include <memory>    // 为 std::unique_ptr 提供支持template <typename T>
class Vector {
private:std::unique_ptr<T[]> data; // 使用智能指针管理动态数组的内存int size; // 数组的大小public:// 构造函数Vector(int n) : size(n) {if (n < 0) {throw std::length_error("Size cannot be negative.");}data = std::make_unique<T[]>(n); // 使用智能指针分配内存}// 重载构造函数,初始化所有项为指定值Vector(int n, T value) : size(n) {if (n < 0) {throw std::length_error("Size cannot be negative.");}data = std::make_unique<T[]>(n);for (int i = 0; i < n; ++i) {data[i] = value; // 初始化数组元素}}// 深复制构造函数Vector(const Vector<T>& other) : size(other.size) {data = std::make_unique<T[]>(size);for (int i = 0; i < size; ++i) {data[i] = other.data[i]; // 复制数据项}}// 获取数组的大小int get_size() const {return size;}// 通过索引访问元素T& at(int index) {if (index < 0 || index >= size) {throw std::out_of_range("Index is out of range.");}return data[index];}// 运算符重载 []T& operator[](int index) {if (index < 0 || index >= size) {throw std::out_of_range("Index is out of range.");}return data[index];}// 友元函数,用于输出 Vector 中的数据项friend void output(const Vector<T>& vec) {for (int i = 0; i < vec.size; ++i) {std::cout << vec.data[i] << " ";}std::cout << std::endl;}// 析构函数(智能指针会自动释放内存)
};#endif // VECTOR_HPP

  

task4.cpp:

#include <iostream>
#include "Vector.hpp"void test1() {using namespace std;int n;cout << "Enter n: ";cin >> n;Vector<double> x1(n); // 创建一个动态数组for (auto i = 0; i < n; ++i)x1.at(i) = i * 0.7; // 初始化数组中的每个数据项cout << "x1: "; output(x1);Vector<int> x2(n, 42); // 创建并初始化所有项为 42 的数组const Vector<int> x3(x2); // 深复制 x2 到 x3cout << "x2: "; output(x2);cout << "x3: "; output(x3);x2.at(0) = 77; // 修改 x2 中的值x2.at(1) = 777;cout << "x2: "; output(x2);cout << "x3: "; output(x3);
}void test2() {using namespace std;int n, index;while (cout << "Enter n and index: ", cin >> n >> index) {try {Vector<int> v(n, n); // 创建动态数组并初始化v.at(index) = -999; // 设置指定下标的值cout << "v: "; output(v);}catch (const exception& e) {cout << e.what() << endl; // 捕获异常并输出错误信息}}
}int main() {using namespace std;cout << "测试1: 模板类接口测试\n";test1();cout << "\n测试2: 模板类异常处理测试\n";test2();return 0;
}

  

实验结果截图:

 

任务五:

task5.cpp:

#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <string>using namespace std;// 学生信息结构体
struct Student {int id;            // 学号string name;      // 姓名string major;     // 专业int score;        // 分数// 构造函数Student(int _id, string _name, string _major, int _score): id(_id), name(_name), major(_major), score(_score) {}
};
// 比较函数,用于按专业和分数排序
bool compare(const Student& a, const Student& b) {if (a.major == b.major) {return a.score > b.score; // 专业相同按分数降序}return a.major < b.major; // 按专业字典序升序
}// 读取数据并处理排序
void processStudents(const string& inputFile, const string& outputFile) {vector<Student> students; // 存储学生信息// 读取文件ifstream inFile(inputFile);if (!inFile) {cerr << "无法打开文件: " << inputFile << endl;return;}int id, score;string name, major;// 读取数据while (inFile >> id >> name >> major >> score) {students.emplace_back(id, name, major, score); // 将数据存入 vector}inFile.close();// 排序sort(students.begin(), students.end(), compare);// 输出到屏幕和文件ofstream outFile(outputFile);if (!outFile) {cerr << "无法打开文件: " << outputFile << endl;return;}cout << "学号\t姓名\t专业\t分数" << endl; // 打印表头outFile << "学号\t姓名\t专业\t分数" << endl; // 写入文件表头for (const auto& student : students) {cout << student.id << "\t" << student.name << "\t"<< student.major << "\t" << student.score << endl;outFile << student.id << "\t" << student.name << "\t"<< student.major << "\t" << student.score << endl; // 写入文件}outFile.close();
}
int main() {string inputFile = "data5.txt";  // 输入文件名string outputFile = "ans5.txt";   // 输出文件名processStudents(inputFile, outputFile); // 处理学生信息return 0;
}

  

实验结果截图:

 

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

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

相关文章

道阻且长——2024秋软工实践个人总结

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/SE2024这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13315这个作业的目标 回顾自己的软工实践课程学号 102201120道阻且长——2024秋软工实践个人总结 一、学期回顾 1.1 想象与实际 开课之…

【Rive】Rive在Android上的简单应用

1 前言 ​ Rive 是一款强大的矢量图编辑器,可以设计图形、也可以制作动画。Rive 提供了矩形、圆形、三角形、多边形、星形、钢笔、文字等工具来绘制各式各样的矢量图形;提供了平移、旋转、缩放等工具对矢量图形进行各种变换;提供了骨骼、约束、时间线、状态机、过渡条件、…

UML之类与类图

在所有项目中,类都是最常见的UML模型元素(当然,不可否认,很多项目还没画出类图就直接进入编码实现的阶段了)。类是UML模型与具体实现代码之间的桥梁,随着对UML建模的深入了解,我们也会发现,类(确切说是分析类)其实也是一些模型之间的桥梁。 在真实世界中不同对象通过…

Linux学习笔记(二) vi/vim快速入门

Linux系统会内置vi文本编辑器。 vim具有程序编辑的能力,可以看作是vi的增强版本,可以主动的以字体颜色辨别语法的正确性, 方便程序设计。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。 下面将介绍: 1.vim打开或创建文件的方法。 2.vim的三种工…

Z-BlogPHP 安装步骤

解压程序代码将下载的 Z-BlogPHP 压缩包解压到你的网站根目录,例如 /home/wwwroot/example.com/。访问安装页面打开浏览器,访问你的网站地址,例如 http://example.com/。 会自动跳转到安装页面 http://example.com/zb_install/index.php。填写安装信息在安装页面中输入以下信…

请问如何在 Z-BlogPHP 中开启 Beta 版更新推送?

在 Z-BlogPHP 中开启 Beta 版更新推送可以帮助你及时获取最新的功能和改进,但同时也需要注意 Beta 版可能存在不稳定的情况。以下是开启 Beta 版更新推送的详细步骤:进入后台管理:登录 Z-BlogPHP 后台管理界面,使用你在安装时设置的管理员用户名和密码。访问应用中心:在后…

升级 Z-BlogPHP 到 1.7.3.3260 后为什么会出现后台登录错误?

升级 Z-BlogPHP 到 1.7.3.3260 版本后,后台登录可能会出现错误,主要是由于新版本增加了两个重要的安全保护功能:CSRF(跨站请求伪造)保护和验证码功能。这些功能旨在提高系统的安全性,防止未经授权的访问和自动化攻击。然而,由于某些主题或插件的兼容性问题,这些新增的安…

织梦网站logo图片怎么修改,织梦网站Logo图片修改指南

修改织梦网站的Logo图片可以提升网站的品牌形象。以下是详细的步骤:登录后台管理系统:使用管理员账号登录织梦CMS的后台管理系统。进入模板管理:导航到“模板管理” -> “默认模板管理”。编辑头部模板:找到头部模板文件,通常是header.htm。 点击“编辑”按钮,打开模板…

网站如何修改HTML,轻松掌握HTML文件的编辑技巧

HTML(超文本标记语言)是构建网页的基础。如果您需要修改网站的HTML文件,以下是一些基本步骤和技巧:找到HTML文件:确定您需要修改的HTML文件的位置。通常,HTML文件位于网站根目录或特定的文件夹中。使用文本编辑器:使用文本编辑器(如Notepad++、Sublime Text、VS Code等…

如何修改公司网站的内容,轻松更新网站信息

公司网站的内容更新是维护品牌形象和客户信任的重要环节。以下是一些步骤和技巧,帮助您轻松修改公司网站的内容:确定修改内容:明确需要修改的内容,例如新闻公告、产品介绍、联系方式等。登录后台管理系统:如果您的网站使用CMS(如WordPress、Joomla等),登录后台管理系统…

百度网站标题被修改怎么办,快速恢复百度搜索结果中的网站标题

如果发现百度搜索结果中的网站标题被修改,可以采取以下措施:检查网站元标签:确保网站的HTML代码中包含正确的<title>标签,例如:<title>您的网站标题</title>更新robots.txt:确保robots.txt文件没有阻止搜索引擎抓取网站的关键页面。 提交站点地图:在百…

上传到ftp的网站怎么修改,FTP上传网站文件修改指南

通过FTP上传文件后,你可以直接在服务器上修改网站文件。以下是详细的步骤:连接到FTP服务器:使用FTP客户端(如FileZilla、WinSCP等)连接到你的服务器。输入FTP服务器地址、用户名和密码。导航到网站目录:在FTP客户端中,导航到存放网站文件的目录。通常这个目录名为 publi…