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

发布时间 2023-12-16 22:16:04作者: 方艺博

任务4

#include <iostream>
#include <stdexcept>
#include <stdlib.h>

template <typename T>
class Vector {
    public:
        friend void output(const Vector<T1> &v);
        Vector<T>() = default;
        Vector<T>(int s);
        Vector<T>(int s, T t);
        Vector<T>(const Vector<T> &v);
        ~Vector<T>();
        int get_size() const;
        T& at(int i);
        T& operator[](int i);
        template <typename T1>
       
 private:
        int size;
        T *vec;
};
template <typename T>
Vector<T>::Vector(int s)
    : size{s} {
    vec = new T[s];
}
template <typename T>
Vector<T>::Vector(int s, T t)
    : size{s} {
    vec = new T[s];
    for (int i = 0; i < s; i++)
        vec[i] = t;
}
template <typename T>
Vector<T>::Vector(const Vector<T> &v)
    : size{v.size} {
    vec = new T[v.size];
    for (int i = 0; i < v.size; i++)
        vec[i] = v.vec[i];
}
template <typename T>
Vector<T>::~Vector() {
    delete[] vec;
}
template <typename T>
int Vector<T>::get_size() const {
    return size;
}
template <typename T>
T& Vector<T>::at(int i) {
    if (i > size) throw std::out_of_range("下标越界");
    else return vec[i];
}
template <typename T>
T& Vector<T>::operator[](int i) {
    if (i > size) throw std::out_of_range("下标越界");
    else return vec[i];
}
template <typename T1>
void output(const Vector<T1> &v) {
    for (int i = 0; i < v.size; i++)
        std::cout << v.vec[i] << ", ";
    std::cout << "\b\b \n";

#include <iostream>
#include "Vector.hpp"

void test() {
    using namespace std;

    int n;
    cin >> n;

    Vector<double> x1(n);
    for(auto i = 0; i < n; ++i)
        x1.at(i) = i * 0.618;

    output(x1);

    Vector<int> x2(n, 777);
    Vector<int> x3(x2);

    output(x2);
    output(x3);

    x2.at(0) = 42;
    output(x2);

    x3[0] = 666;
    output(x3);
}

int main() {
    test();
}
task4.cpp

 

任务5

 1 #include<iostream>
 2 #include<iomanip>
 3 #include<fstream>
 4 
 5 using namespace std;
 6 
 7 void output(ostream &out) {
 8     for(int i=0;i<=26;i++){
 9         for(int j=0;j<=26;j++)
10         {
11             char c,b;
12             if(i==0&&j==0){
13                 char d = ' ';
14                 out<<setw(2)<<d;
15             }
16             else if(j==0&&i!=0){
17                 out<<setw(2)<<i;
18             }
19             else if(i==0&&j!=0){
20                 char c='a'+j-1;
21                 out<<setw(2)<<c;
22             }
23             else if(i!=0&&j!=0){
24                 char b=(i+j-1+26)%26+'A';
25                 out<<setw(2)<<b;
26             }
27 
28         }
29         out<<endl;
30     }
31 }
32 int main(){
33 
34     output(cout);
35 
36     ofstream outFile("cipher_key.txt");
37     output(outFile);
38     outFile.close();
39 
40     return 0;
41 }
task5.cpp