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

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

时间:2024-12-18 21:31:48浏览次数:5  
标签:std 文件 const index int 实验 using 模板 size

实验四

vector.hpp

  #pragma once
  #include<iostream>
  #include<stdexcept>
  using namespace std;
 template<typename T>
 class Vector {
  private:
     int size;
     T* ptr;
 public:
     Vector(int size, int value = 0) :size{ size } {
         if (size < 0) {
             throw length_error("negative size");
         }
         ptr = new T[size];
         for (int i = 0; i < size; i++) {
             ptr[i] = value;
         }
    }
     int get_size()const { return size; }
     T& at(int index)const {
         if (index < 0 || index >= size) throw out_of_range("index out of range");
         return ptr[index];
     }
     T& at(int index) {
         return static_cast<const Vector<T>*>(this)->at(index);
  }
     T& operator[](int index)const {
         if (index < 0 || index >= size) throw out_of_range("index out of range");
         return ptr[index];
    }
    T& operator[](int index) {
        return static_cast<const Vector<T>*>(this)->operator[](index);
     }
 };
 template<typename T1>
 void output(const Vector<T1>& v) {
     for (int i = 0; i < v.get_size();i++) {
         cout << v[i] << ", ";
    }
     cout << endl;
 }

test.cpp

#include <iostream>
#include "C:\Users\Administrator\Documents\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

test.cpp

 

#include <string>
#include <vector>
#include<iomanip>
#include<algorithm>

using std::string;
using std::ostream;
using std::istream;
using std::setw;
using std::setprecision;
using std::setiosflags;
using std::ios_base;

class People{
    private:
        string no;
        string name;
        string major;
        int score;
         
    public:
    People()=default;
    ~People()=default;
    int get_score() const{return score;} 
    string get_string() const{return major;}
    
    friend ostream& operator<<(ostream &out, const People &c);
    friend istream& operator>>(istream &in, People &c);
};


ostream& operator<<(ostream &out, const People &c) {
    out << setiosflags(ios_base::left);
    out << setw(15) << c.no
        << setw(15) << c.name
        << setw(15) << c.major
        << setw(15) << c.score; 
    return out;
}


istream& operator>>(istream &in, People &c) {
    in >> c.no >> c.name >> c.major >> c.score;
    return in;
}


bool compare_by_order(const People &p1,const People &p2) {
    if(p1.get_string()<p2.get_string())
    return true;
    
    if(p1.get_string()==p2.get_string())
    return p1.get_score()>p2.get_score();
    
    return false;
}

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


void save(const std::string &filename, std::vector<People> &v) {
    using std::ofstream;
    ofstream out(filename);
    if(!out.is_open()) {
    std::cout << "fail to open file to write\n";
    return;
    }
    output(out, v);
    out.close();
}

void load(const std::string &filename, std::vector<People> &v) {
    using std::ifstream;
    ifstream in(filename);
    if(!in.is_open()) {
        std::cout << "fail to open file to read\n";
    return;
}
std::string title_line;
getline(in, title_line); 
People t;
while(in >> t)
    v.push_back(t);
    in.close();
}

void test(){
    using namespace std;
    
    vector<People> v;
    
    load("data5.txt",v);
    sort(v.begin(),v.end(),compare_by_order);
    output(cout,v);
    save("ans5.txt",v); 
}

int main(){
    test();
}

实验结果

 

标签:std,文件,const,index,int,实验,using,模板,size
From: https://www.cnblogs.com/hinaou/p/18613013

相关文章

  • 实验6
    任务41#include<stdio.h>2#defineN1034typedefstruct{5charisbn[20];//isbn号6charname[80];//书名7charauthor[80];//作者8doublesales_price;//售价9intsales_count;......
  • 实验六 模板类、文件I/O和异常处理
    1、实验任务一Complex.hpp#pragmaonce#include<iostream>#include<stdexcept>//声明//////////////////////////////////////////////////////复数模板类声明template<typenameT>classComplex{public:Complex(Tr=0,Ti=0);Complex(co......
  • 实验6
    任务4源代码#include<stdio.h>#defineN10typedefstruct{charisbn[20];//isbn号charname[80];//书名charauthor[80];//作者doublesales_price;//售价intsales_count;//销售册数}Book;......
  • 实验6
    任务4:源代码:1#include<stdio.h>2#defineN1034typedefstruct{5charisbn[20];//isbn号6charname[80];//书名7charauthor[80];//作者8doublesales_price;//售价9intsales_count;......
  • tauri2文件资源访问和存储常见问题解决
    上tauri2的github上搜一下,发现问题还是挺多的,如果你是从tauri1迁移过来的话,估计要走的坑更多,因为tauri2的配置很多已经和tauri1不一样了,如果你还是习惯用tauri1的配置思维来搞tauri2的话,肯定会让你很难受。附上tauri2常用的几个链接:官方javascript的api文档:window|Tauri ......
  • jquery多文件上传插件
    jquery.imageuploader.js是一款jquery多文件上传插件。该jquery多文件上传插件主要用于上传图片,它允许你选择多个图片文件,也可以直接拖拽图片到指定区域,然后显示图片的预览图和信息,最后通过Ajax一次性上传选择的图片到服务器上。在线预览 下载 该jquery多文件上传插件的特......
  • 【QAC】Validate授权文件分析和服务端授权部署
    1、文档目标分析授权文件的结构和各个功能组件进行对应,为后期排查客户授权问题提供理论基础。记录HelixQAC和Validate服务器端授权快速部署步骤,避免后续出现授权冲突文件,减少售后成本。对QAC授权、Validate授权和license文件间的调用机制,进行说明。后续了解进行软件授权的......
  • 实验6 模板类、文件I/O和异常处理
    实验任务4:1#pragmaonce23#include<iostream>4#include<stdexcept>56usingnamespacestd;78template<typenameT>9classVector{10public:11Vector(intn,Tvalue=0);12~Vector();13Vec......
  • 什么,浏览器也能访问本地电脑文件!!!
    文章目录需求分析1.如何弹出文件夹选择框2.如何获取文件夹中的内容3.如何读取文件内容4.总体代码需求在浏览器中打开本地文件夹并获取指定文件夹下的内容在早期的时候呢,这些API确实是没有的,也就是根本不允许在浏览器中读取本地文件夹里的信息,但是后期出现的......
  • 文献解读:采用波浪前缘的风电机组翼型后缘降噪实验研究
    题目:采用波浪前缘的风电机组翼型后缘降噪实验研究关键词:风能;风力发电机;噪音控制;波浪前缘;尾缘噪声1中文摘要  旋转叶片产生的气动噪声是制约现代风力机快速发展的重要因素。在各种噪声源中,翼型尾缘噪声对风力机噪声的贡献最大。  本文在半消声室内进行了仿生正弦波形前......