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

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

时间:2023-12-13 21:24:40浏览次数:40  
标签:文件 elements const Vector 实验 output include 模板 size

实验任务4 Vector.hpp

#ifndef VECTOR_HPP
#define VECTOR_HPP

#include <iostream>
#include <stdexcept>

template <typename T>
class Vector;

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

template <typename T>
class Vector {
private:
    T* elements;
    size_t size;

public:
    Vector(size_t size) : size(size) {
        elements = new T[size];
    }

    Vector(size_t size, const T& value) : size(size) {
        elements = new T[size];
        for (size_t i = 0; i < size; ++i) {
            elements[i] = value;
        }
    }

    Vector(const Vector& other) : size(other.size) {
        elements = new T[size];
        for (size_t i = 0; i < size; ++i) {
            elements[i] = other.elements[i];
        }
    }

    ~Vector() {
        delete[] elements;
    }

    size_t get_size() const {
        return size;
    }

    T& at(size_t index) {
        if (index >= size) {
            throw std::out_of_range("越界");
        }
        return elements[index];
    }

    T& operator[](size_t index) {
        if (index >= size) {
            throw std::out_of_range("越界");
        }
        return elements[index];
    }

    friend void output<T>(const Vector<T>& vec);
};

template <typename U>
void output(const Vector<U>& vec) {
    for (size_t i = 0; i < vec.size; ++i) {
        std::cout << vec.elements[i] << " ";
    }
    std::cout << std::endl;
}

#endif
View Code task4.cpp
#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.7;

    output(x1);

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

    output(x2);
    output(x3);

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

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

int main() {
    test();
}
View Code

 

实验任务5  task5.cpp
#include<iostream>
#include<fstream>
#include<iomanip>
using namespace std;

void output(std::ostream& output)
{
output << " ";
for (int i = 97; i < 123; i++)
{
output << setw(2) << char(i);
}
output << endl;

for (int i = 1; i <= 26; i++)
{
output << setw(2) << i;
int j;
for (j=i;j<i+26;j++)
{
output<<setw(2)<<char(65+j%26);
}
output << endl;
}
}

int main()
{
ofstream out;
output(cout);
out.open("cipher_key.txt");
output(out);
return 0;
}
View Code

 

 

标签:文件,elements,const,Vector,实验,output,include,模板,size
From: https://www.cnblogs.com/mzxfcyt/p/17899944.html

相关文章

  • 实验6 C语言结构体、枚举应用编程
    1.实验任务1【验证性实验】2.实验任务2【验证性实验】3.实验任务3【验证性实验】4.实验任务4task4源代码:1#include<stdio.h>2#include<stdlib.h>3#defineN1045typedefstruct{6charisbn[20];//isbn号7charname[80];......
  • 实验六
    任务四task4.cpp1#include<iostream>2#include"vector.hpp"3voidtest()4{5usingnamespacestd;6intn;7cin>>n;89Vector<double>x1(n);10for(autoi=0;i<n;++i)11......
  • 实验六
    #include<stdio.h>#include<string.h>#include<stdlib.h>typedefstruct{charname[20];//姓名charphone[12];//手机号intvip;//是否为紧急联系人,是取1;否则取0}Contact;//函数声明voidset_vip_contact(Contactx[],......
  • 开发Chrome扩展程序,核心manifest 文件(上)
    大家好,我是dom哥。我正在写关于Chrome扩展开发的系列文章,感兴趣的可以点个小星星。Chrome在全球浏览器市场份额独占6成,无论是对普通用户还是开发者,都是电脑里的必备利器。Chrome无论是在性能还是UI交互方面都非常出色,而Chrome扩展则为开发者提供了接口,让开发者有能力......
  • 实验7
    //P286例8.17//对教材上的程序作了微调整,把输出学生信息单独编写成一个函数模块//打印不及格学生信息和所有学生信息程分别调用#include<stdio.h>#include<string.h>#defineN3//运行程序输入测试时,可以把这个数组改小一些输入测试typedefstructstu......
  • Chrome扩展的核心:manifest 文件(上)
    大家好,我是dom哥。我正在写关于Chrome扩展开发的系列文章,感兴趣的可以点个小星星。Chrome在全球浏览器市场份额独占6成,无论是对普通用户还是开发者,都是电脑里的必备利器。Chrome无论是在性能还是UI交互方面都非常出色,而Chrome扩展则为开发者提供了接口,让开发者有能力自......
  • common-fileupload组件实现java文件上传和下载
    简介:文件上传和下载是javaweb中常见的操作,文件上传主要是将文件通过IO流传放到服务器的某一个特定的文件夹下,而文件下载则是与文件上传相反,将文件从服务器的特定的文件夹下的文件通过IO流下载到本地。对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直......
  • 保姆级教程利用免费内网穿透工具快速实现远程访问SMB文件共享
    当你需要在远程网络中访问SMB(ServerMessageBlock)共享资源时,你可以使用Solopace.Gem来建立安全且便捷的连接。Solopace.Gem是一款专为远程访问和网络连接而设计的工具,它能够轻松地穿越NAT(网络地址转换)和防火墙,如果运营商的防火墙让你能够安全地远程访问SMB共享文件夹。本教程将指......
  • `/etc/gitlab/gitlab-secrets.json`文件丢失时Gitlab恢复办法
    当/etc/gitlab/gitlab-secrets.json文件丢失时如果您没有备份secrets文件,则必须完成几个步骤才能使GitLab重新正常工作。secrets文件负责存储包含必需的敏感信息的列的加密密钥。如果密钥丢失,GitLab将无法解密这些列,从而阻止对以下项目的访问:CI/CD变量Kubernetes/GCP集成自......
  • apache 项目的php配置文件
    <VirtualHost*:80>[email protected]"/www/wwwroot/api.com"ServerNameapi.comServerAliasapi.com#errorDocument404/404.htmlErrorLog"/www/wwwlogs/api.com-error_log"Cu......