实验6 C++

news/2024/12/16 21:48:45/文章来源:https://www.cnblogs.com/tt3n/p/18610642

任务四:

Vector.hpp
#pragma once
#include <iostream> 
#include <stdexcept>using namespace std;template <typename T>
class Vector {
public:Vector(int n, int p = 0);Vector(const Vector<T> &v);~Vector();int get_size() const;T& at(int i);T& operator[](int i);
private:int size;T *a;template <typename T1>friend void output(const Vector<T1> &v);
};
template <typename T>
Vector<T>::Vector(int n, int p) : size{n} {if(n < 0)throw length_error("Vector constructor: negative size");else {a = new T [n];for(int i = 0; i < n; i++)a[i] = p; }
}template <typename T>
Vector<T>::Vector(const Vector<T> &v) {size = v.size;a = new T [size];for(int i = 0; i < size; i++)a[i] = v.a[i];
}template <typename T>
Vector<T>::~Vector() {delete [] a;
}template <typename T>
int Vector<T>::get_size() const {return size;}template < typename T> 
T& Vector<T>::at(int i) {if(i >= size || i < 0)throw invalid_argument("Vector: index out of range");elsereturn a[i];
}template <typename T> 
T& Vector<T>::operator[](int i) {if(i >= size || i < 0)throw invalid_argument("Vctor: index out of range");elsereturn a[i];
}template <typename T1>
void output(const Vector<T1> &v) 
{for(int i = 0; i < v.size - 1; i++)cout << v.a[i] << ", ";cout << v.a[v.size - 1] << endl;
}
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);const Vector<int> x3(x2);cout << "x2: "; output(x2);cout << "x3: "; output(x3);x2.at(0) = 77;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() {cout << "测试1: 模板类接口测试\n";test1();cout << "\n测试2: 模板类异常处理测试\n";test2();
}

运行结果:

任务五:

task5.cpp
 #include <iostream>
#include <iomanip>
#include <string>
#include <vector>
#include <fstream>
#include <algorithm>using namespace std;class Stu {
public:Stu() = default;~Stu() = default;string get_major() const {return major;}int get_score() const {return score;}friend ostream& operator<<(ostream &out, const Stu &s);friend istream& operator>>(istream &in, Stu &s);private:string no;string name;string major;int score;   
};
ostream& operator<<(ostream &out, const Stu &s) {out << setiosflags(ios_base::left);out << setw(10) << s.no<< setw(10) << s.name<< setw(10) << s.major<< setw(10) << s.score << endl;return out;
}istream& operator>>(istream &in, Stu &s) {in >> s.no >> s.name >> s.major >> s.score;return in;
}bool cmp(const Stu &s1, const Stu &s2) {if(s1.get_major() < s2.get_major())  return true;if(s1.get_major() == s2.get_major())return s1.get_score() > s2.get_score();return false;
}void output(ostream &out, const vector<Stu> &v) {for(auto &i : v)out << i ;
}void load(const string &filename, vector<Stu> &v) {ifstream in(filename);if(!in.is_open()) {cout << "fail to open file to read" << endl;return;                   }string title_line;getline(in, title_line);Stu s;while(in >> s)v.push_back(s);in.close();
}void save(const string &filename, vector<Stu> &v) {ofstream out(filename);if(!out.is_open()) {cout << "fail to open file to write" << endl;return;}output(out, v);out.close();
}int main() {vector<Stu> v;load("data5.txt", v);sort(v.begin(), v.end(), cmp);output(cout, v);save("ans5.txt", v);
}

运行结果:

 

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

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

相关文章

Docker安装Redis和Elasticsearch

本章将和大家分享在Docker中如何安装Redis和Elasticsearch。本章将和大家分享在Docker中如何安装Redis和Elasticsearch。废话不多说,下面我们直接进入主题。 一、Docker安装Redis 1、拉取最新版的 redis 镜像docker pull redis2、查看本地镜像docker images3、从官网获取 redi…

Redis应用—4.在库存里的应用

大纲 1.库存模块设计 2.库存缓存分片和渐进式同步方案 3.基于缓存分片的下单库存扣减方案 4.商品库存设置流程与异步落库的实现 6.库存入库时"缓存分片写入 + 渐进式写入 + 写入失败进行MQ补偿"的实现 7.库存扣减时"基于库存分片依次扣减 + 合并扣减 + 扣不了返…

Learn learn Cython

[SCTF ez_cython]简单分析需要调用一个cy库,找到文件"cy.cp38-win_amd64.pyd"pyd文件生成:编写pyx文件 \#test.pyx def say_hello_world(name): print("Hello world" % name)编写setup \#setup.py from distutils.core import setup from Cython.Build imp…

24.10.31 补充日志分析以及打包压缩

uniq 作用:去重,一般与sort搭配使用,单用uniq,是合并相邻两行相同内容 参数: -c #统计重复行的次数 eg:[root@oldboyedu ~]# cat uniq.txt oldboy lidao lidao lidao lidao oldboy oldboy lidao oldboy pldboy [root@oldboyedu ~]# uniq uniq.txt oldboy lidao oldboy l…

k8s阶段08 k8s扩展(kubectl插件), 调度器(亲和调度, 污点和容忍度调度), 集群日常管理, 高可用集群部署, 集群版本升级

Kubernetes 扩展机制 扩展Kubernetes1.kubectl插件 2.API Server扩展身份认证、鉴权和动态准入控制相关插件 3.API扩展,以支持更多的资源类型 4.调度器扩展以支持更多调度算法 5.控制器扩展以支持更多的Controller或Operator 6.网络插件,扩展Kubelet以配置Pod网络 7.设备插件…

WebP图片使用踩坑

前情 WebP是一种同时提供了有损压缩与无损压缩(可逆压缩)的图片文件格式,最初在2010年发布,目标是减少文件大小,相较于传统的 PNG、JPG,甚至是动图 GIF 的格式,WebP 比它们的空间更小。根据谷歌的测试,WebP 格式的图片可以比 JPEG 格式的图片小 26%-34%,比 PNG 格式的…

idea把unicode转为中文

国际化需求,中文转unicode了 ‌设置文件编码‌:打开IDEA,通过快捷键Ctrl+Alt+S或通过菜单File -> Settings,搜索File encoding,选择Transparent native-to-ascii conversion选项,并设置默认编码为UTF-8。这样设置后,打开properties文件就可以显示中文了。

Qt+OPC开发笔记(一):OPCUA介绍、open62541介绍、编译与基础环境Demo

前言本篇介绍OPC协议,相关开源库、编译并搭建Qt开发OPC的基础环境。 Demo OPCOPC(OLE for Process Control)是一个工业标准,用于实现工业自动化系统中的不同设备和应用软件之间的数据交换和互操作性。以下是关于OPC的详细介绍:OPC的起源与发展OPC起源于上世纪90年代,随着…

vue 上传组件 vxe-upload 图片和附件拖拽调整顺序

vue 上传组件 vxe-upload 图片和附件拖拽调整顺序,通过设置 drag-sort 参数就可以启用拖拽排序功能 官网:https://vxeui.com/ 图片拖拽排序<template><div><vxe-upload v-model="imgList" mode="image" multiple drag-sort></vxe-u…

arm安装数据库

https://blog.csdn.net/wochunyang/article/details/132883654https://blog.csdn.net/qq_43690482/article/details/132168349https://www.cnblogs.com/wshisboy/p/16374015.htmlhttps://www.cnblogs.com/windandchimes/p/18344463 首先先看麒麟系统的版本CPU对应版本。 cat /p…

12月做题记录

whk恐怖如斯,仅补两周即可让呆猫失去大脑12月做题记录✩ trick ✯ 会大部分,要\(tj\)提示 ✬ 会小部分/完全没想到,看了\(tj\)才会 ◈ 脑电波 ✡ 有某一算法的神秘通用性质 ⊗ 待补目录12月做题记录CF1725K Kingdom of CriticismCF1446D2 Frequency Problem (Hard Version)根…

Vulnhub nxy

0x01:端口扫描 主机发现 nmap -sn 10.10.10.0/24全端口扫描 nmap --min-rate 10000 -p- 10.10.10.132UDP扫描 nmap -sU --top=20 10.10.10.132详细端口扫描 nmap -sT -sC -sV -O --min-rate 10000 -p22,80 10.10.10.132漏洞扫描 nmap --script=vuln -p22,80 10.10.10.1320x02:…