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

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

时间:2024-12-22 18:08:42浏览次数:3  
标签:文件 const cout int Vector 实验 include 模板 size

实验任务4

#pragma once
#include <iostream> 
#include <stdexcept>

using namespace std;

template <typename T>
class Vector {
public:
    Vector(int n, int value=0);
    Vector(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 value) : size{n} {
    if(size<0)
        throw length_error("Vector constructor: negative size");
    else {
        a=new T [size];
        for(int i = 0; i < n; i++)
            a[i] =value; 
    }
}

template <typename T>
Vector<T>::Vector(Vector<T> &v) {
    if(v.size<0)
        throw length_error("Vector constructor: negative size");
   else{
   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 out_of_range("Vector: index out of range");
    else
        return a[i];
}

template <typename T> 
T& Vector<T>::operator[](int i) {
    if(i >= size||i<0)
        throw out_of_range("Vctor: index out of range");
    else
        return 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;
}
Vector.hpp
#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();
}
task4.cpp

 

 

实验任务5

#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(15) << s.no
        << setw(15) << s.name
        << setw(15) << s.major
        << setw(15) << 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;
    else if(s1.get_major()==s2.get_major())
        return s1.get_score()>s2.get_score();
    else return false;
}

void output(ostream &out, const vector<Stu> &v) {
    for(auto &i : v)
        out <<i;
}

void open_txt(const string &filename, vector<Stu> &v) {
    ifstream in(filename);
    if(!in.is_open()) {
        cout << "fail to open file to read" << endl;
        return;                   
    }
    string datas;
    getline(in,datas);
    
    Stu s;
    while(in>>s)
        v.push_back(s);
    in.close();
}

void write_txt(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;
    open_txt("data5.txt", v);
    sort(v.begin(), v.end(), cmp);
    output(cout, v);
    write_txt("ans5.txt", v);
}
task5.cpp

 

 

 

标签:文件,const,cout,int,Vector,实验,include,模板,size
From: https://www.cnblogs.com/phanoto/p/18615797

相关文章

  • 4-14文件上传刷题日记
    buuctf[是兄弟就来传马先传一个php木马页面报错,随便改一个后缀,看看是黑名单还是白名单过滤,这里php代码前加GIF89a绕过图片大小检查报错,接着试一下是不是MIME过滤Content-Type:image/png上传成功/var/www/html/upload/743be915f2c6ab5de3600d87068cafd2/hack.jpgsuccesfu......
  • 如何修改网站模板顺序,轻松调整网站布局
    修改网站模板顺序可以帮助您优化用户体验和SEO效果。以下是一些常见方法:通过CMS后台修改:登录您的网站管理后台。寻找“页面”或“模板”设置。选择需要调整顺序的页面或模块。使用拖拽功能调整顺序,保存更改。预览页面确保调整无误。直接修改模板文件:使用FTP工具登......
  • 修改网站模板文件的软件,推荐的软件和使用方法
    一、推荐的软件SublimeTextSublimeText是一款轻量级且功能强大的文本编辑器,支持多种编程语言和文件格式。它提供了丰富的插件生态系统,可以扩展其功能。VisualStudioCode(VSCode)VSCode是微软开发的一款免费开源代码编辑器,支持多种编程语言和框架。它内置了Git......
  • C++, 模板元编程, 凭借辅助的模板结构的特化 , 从而以类型控制模板类的分支
    u++真是学无止境,遍地地雷,哦不,遍地黄金。看ue序列化中的TArray有感,特节取部分代码保存,希望能多切近ue的编码经验半分。 //...template<typenameT>structTCanBulkSerialize{enum{Value=false};};template<>structTCanBulkSerialize<unsignedint>{enum{Value......
  • 无会员快速下载微云文件
    得益于TX过硬的后台,大家下载微云文件时往往会出现下面的情况无论多好的宽带,依旧会被限制到几十k,下一个文件要一两天,真的是crazy如果想要加速,就不得不买会员,然而即便买了会员,速度可能也只有1M左右实在是良心啊!经过π萌不断地摸索,发现了一个不开会员也能飞速下载的方法,具......
  • 实验六
    task4#include<stdio.h>#defineN10typedefstruct{charisbn[20];//isbn号charname[80];//书名charauthor[80];//作者doublesales_price;//售价intsales_count;//销售册数}Book;voidou......
  • 实验6 C语言结构体、枚举应用编程
    4.实验任务4#include<stdio.h>#defineN10typedefstruct{charisbn[20];//isbn号charname[80];//书名charauthor[80];//作者doublesales_price;//售价intsales_count;//销售册数}Book;voidoutput(Bookx[],intn);voidsort(Bookx[],intn);......
  • 实验6
    task4#include<stdio.h>#defineN10typedefstruct{charisbn[20];//isbn号charname[80];//书名charauthor[80];//作者doublesales_price;//售价intsales_count;//销售册数}Book;voidou......
  • 实验6
     任务4:源代码:1#include<stdio.h>2#defineN1034typedefstruct{5charisbn[20];//isbn号6charname[80];//书名7charauthor[80];//作者8doublesales_price;//售价9intsales_count......
  • 实验6 C语言结构体、枚举应用编程
    实验一://P286例8.17//对教材示例代码作了微调,把输出学生信息单独编写成一个函数模块//打印不及格学生信息、打印所有学生信息均调用该模块实现#include<stdio.h>#include<string.h>#defineN3//运行程序输入测试时,可以把N改小一些输入测试typedefstr......