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

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

时间:2024-12-17 16:53:58浏览次数:8  
标签:文件 const index int Vector 实验 template 模板 size

实验任务4:
代码:

Vector.hpp

查看代码
#pragma once
#include <iostream>
#include <stdexcept>
using namespace std;

template <typename T>
class Vector {
public:
    Vector(int size);
    Vector(int size, T value);
    Vector(const Vector<T>& other);
    ~Vector();                      


    int get_size() const; 
    T& at(int index);  
    const T& at(int index) const; 
    
    T& operator[](int index);
    const T& operator[](int index) const;

    template <typename U>
    friend void output(const Vector<U>& v);

private:
    int size; 
    T* data;
};

template <typename T>
Vector<T>::Vector(int size) : size(size) {
    if (size < 0) throw std::length_error("Vector constructor: negative size");
    data = new T[size]{};
}

template <typename T>
Vector<T>::Vector(int size, T value) : size(size) {
    if (size < 0) throw std::length_error("Vector constructor: negative size");
    data = new T[size];
    for (int i = 0; i < size; ++i) data[i] = value;
}

template <typename T>
Vector<T>::Vector(const Vector<T>& other) : size(other.size) {
    data = new T[size];
    for (int i = 0; i < size; ++i) data[i] = other.data[i];
}


template <typename T>
Vector<T>::~Vector() {
    delete[] data;
}

template <typename T>
int Vector<T>::get_size() const {
    return size;
}

template <typename T>
T& Vector<T>::at(int index) {
    if (index < 0 || index >= size) throw std::out_of_range("Vector: index out of range");
    return data[index];
}

template <typename T>
const T& Vector<T>::at(int index) const {
    if (index < 0 || index >= size) throw std::out_of_range("Vector: index out of range");
    return data[index];
}

template <typename T>
T& Vector<T>::operator[](int index) {
    return at(index);
}

template <typename T>
const T& Vector<T>::operator[](int index) const {
    return at(index);
}


template <typename U>
void output(const Vector<U>& v) {
    for (int i = 0; i < v.size; ++i) {
        std::cout << v.data[i] << " ";
    }
    std::cout << std::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();
}

运行结果:

 

 

实验任务5:

代码:

task5.cpp

查看代码
 #include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
#include <iomanip>

using namespace std;


class Student {
public:
    int id; 
    string name;
    string major; 
    int score; 

    friend istream& operator>>(istream& in, Student& s);
    friend ostream& operator<<(ostream& out, const Student& s);
};

istream& operator>>(istream& in, Student& s) {
    in >> s.id >> s.name >> s.major >> s.score;
    return in;
}
ostream& operator<<(ostream& out, const Student& s) {
    out << left << setw(10) << s.id
        << setw(10) << s.name
        << setw(10) << s.major
        << fixed << setprecision(2) << s.score;
    return out;
}

int main() {
    vector<Student> students;


    const string input_file = "data5.txt";
    const string output_file = "ans5.txt";

    ifstream infile(input_file);
    ofstream outfile(output_file);
    string header;
    getline(infile, header);

    Student temp;
    while (infile >> temp) {
        students.push_back(temp);
    }
    infile.close();

    sort(students.begin(), students.end(), [](const Student& a, const Student& b) {
        if (a.major == b.major) return a.score > b.score;
        return a.major < b.major;
    });

    for (const auto& s : students) {
        cout << s << endl;
    

        for (const auto& s : students) {
            outfile << s << endl;
        }
        outfile.close();
    }
    return 0;
}

运行结果:

 

标签:文件,const,index,int,Vector,实验,template,模板,size
From: https://www.cnblogs.com/xiarihua/p/18612883

相关文章

  • 实验6
    task41#include<stdio.h>2#defineN1034typedefstruct{5charisbn[20];//isbn号6charname[80];//书名7charauthor[80];//作者8doublesales_price;//售价9intsales_count;......
  • 实验6 模板类、文件I\O和异常处理
    任务4源码:1#pragmaonce23#include<iostream>4#include<stdexcept>56usingnamespacestd;78//模板类声明9template<typenameT>10classVector{11public:12Vector(intn):size{n}{13if(n<0)14......
  • Linux系统中安装HDFS(Hadoop分布式文件系统)的详细步骤
    一、前提条件安装好Linux操作系统(如Ubuntu、CentOS等)。确保系统已经安装了Java运行环境(JDK),因为Hadoop是基于Java开发的。可以通过在终端输入java-version来检查是否安装了JDK。如果没有安装,需要先安装适合您系统的JDK版本,并配置好环境变量。二、下载Hadoop访问Hadoop官方......
  • 实验6
    任务4源代码1#include<stdio.h>2#defineN1034typedefstruct{5charisbn[20];//isbn号6charname[80];//书名7charauthor[80];//作者8doublesales_price;//售价9intsales_count;......
  • httpClient大文件下载
    在一直项目中使用文件下载,同事反应下载文件做进度条的时候没有正常显示进度条大致代码如下publicclassDowmloadModel{publicstringUrl{get;set;}publicstringLocalSaveFullPath{get;set;}publicboolIscontinue{get;set;}publicActio......
  • 实验6 模板类、文件I/O和异常处理
    实验任务4代码Vector.hpp1#pragmaonce2#include<iostream>3#include<stdexcept>45template<typenameT>6classVector{7public:8//构造函数9Vector(intsize);10Vector(intsize,Tvalue);11Vector(constV......
  • webbroker从本地HTML文件导入
    a01.rarprocedureTWebModule1.WebModule1DefaultHandlerAction(Sender:TObject;Request:TWebRequest;Response:TWebResponse;varHandled:Boolean);varFileContent:TStringList;beginFileContent:=TStringList.Create;//假设你的HTML文件位于Web......
  • 好,我们以你的 `euclidolap.proto` 文件为例,调整代码结构,让服务逻辑更清晰,同时将 `eucl
    好,我们以你的euclidolap.proto文件为例,调整代码结构,让服务逻辑更清晰,同时将euclidolap模块分离到独立文件中。假设文件结构调整我们将euclidolap.proto生成的代码放到src/euclidolap模块中,同时将服务端逻辑分开组织。最终文件结构如下:project/├──build.rs......
  • 分布式文件系统HDFS
    HDFS简介HDFS(HadoopDistributedFileSystem)是一个分布式文件系统,是Hadoop生态系统的核心组件之一。它被设计用来在廉价的硬件设备上存储大规模的数据,并且能够提供高容错性和高吞吐量的数据访问。例如,在一个大型的互联网公司,每天会产生海量的用户行为数据,如浏览记录、购买记......
  • 实验6 模板类、文件I/O和异常处理
    1.实验任务4Vector.hpp源代码:点击查看代码#pragmaonce#include<iostream>#include<stdexcept>#include<algorithm>//forstd::copytemplate<typenameT>classVector{private:T*data;size_tsize;public://构造函数Vecto......