首页 > 其他分享 >实验6 模板类和文件I/O

实验6 模板类和文件I/O

时间:2022-12-01 20:58:08浏览次数:42  
标签:文件 const int ++ Vector 实验 include 模板 size

实验任务3

#include <iostream>
#include <fstream>
#include <array>
#define N 5
int main() {
    using namespace std;
    array<int, N> x{ 97, 98, 99, 100, 101 };
    ofstream out;
    out.open("data1.dat", ios::binary);
    if (!out.is_open()) {
        cout << "fail to open data1.dat\n";
        return 1;
    }
    // 把从地址&x开始连续sizeof(x)个字节的数据块以字节数据块方式写入文件data1.txt
    out.write(reinterpret_cast<char*>(&x), sizeof(x));
    out.close();
}

#include <iostream>
#include <fstream>
#include <array>
#define N 5
int main() {
    using namespace std;
    array<int, N> x;
    ifstream in;
    in.open("data1.dat", ios::binary);
    if (!in.is_open()) {
        cout << "fail to open data1.dat\n";
        return 1;
    }
    // 从文件流对象in关联的文件data1.dat中读取sizeof(x)字节数据写入&x开始的地址单元
    in.read(reinterpret_cast<char*>(&x), sizeof(x));
    in.close();
    for (auto i = 0; i < N; ++i)
        cout << x[i] << ", ";
    cout << "\b\b \n";
}

把task3_2.cpp代码中line7的对象类型从 array<int, N> 改成 array<char, N> 后运行结果

分析:task3_2是从文件流对象in关联的文件data1.dat中读取sizeof(x)字节数据写入&x开始的地址单元,改动前的int类型占四个字节,而改动后的char类型只占一个字节,所以第二次读取97时实际读取的是a与三个空字节,读取98时刚好是第五个字节b。

实验任务4

#include <iostream>
#include "Vector.h"
using namespace std;
void text3()
{
    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() {
    text3();
}
#pragma once
#include<iostream>
#include<cassert>
using namespace std;
template<typename T>
class Vector
{
public:
    Vector(int n) :size{ n }{ p = new T[n]; }
    Vector(int n, T value);
    Vector(const Vector<T>& vp);
    int get_size()const;
    T& at(int i)const;
    T& operator[](int i)const;
    ~Vector<T>();
    template<typename T1>
    friend void output(Vector<T1>& v);
private:
    int size;
    T* p;
};
template<typename T>
Vector<T>::Vector(int n, T value):size{n}
{ 
    p = new T[n]; 
    for (auto i = 0; i < size; ++i) 
        p[i] = value; 
}
template<typename T>
Vector<T>::Vector(const Vector<T>& vp) :size{ vp.size }
{
    p = new T[size];
    for (auto i = 0; i < size; ++i)
        p[i] = vp.p[i];
}
template<typename T>
int Vector<T>::get_size()const
{
    return size;
}
template<typename T>
T& Vector<T>::at(int i)const
{
    return p[i];
}
template<typename T>
T& Vector<T>::operator[](int i)const
{
    return p[i];
}
template<typename T1>
void output(Vector<T1>& v)
{
    for (auto i = 0; i < v.size; ++i)
        cout << v.p[i] << " ";
    cout << endl;
}
template<typename T>
Vector<T>::~Vector()
{
    delete[] p;
}

实验任务5

#include<iostream>
#include<iomanip>
#include<fstream>
using namespace std;
void output(ofstream&out)
{
    int i,j,t,k;
    char w[27][27];
    for (t = 0,j=0; j < 26; j++,t++)
            w[0][j] = 'a' + t;
    for(i=1,k=0;i<27;i++,k++)
    {
        char c = 'B' + k;
        if (c > 'Z')
            c = c - 26;
        for (j = 0, t = 0; j < 26; j++, t++)
        {
                w[i][j] = c + t;
                if (w[i][j] > 'Z')
                    w[i][j] -= 26;
        }
    }
    cout << "  ";
    out << "  ";
    for (j = 0; j < 26; j++)
    {
        cout << setw(2) << w[0][j];
        out << setw(2) << w[0][j];
    }
    cout << endl;
    out << endl;
    for (i = 1; i < 27; i++)
    {
        cout << left << setw(3) << i;
        out << left << setw(3) << i;
        for (j = 0; j < 26; j++)
        {
            cout << left << setw(2) << w[i][j];
            out << left<<setw(2) << w[i][j];
        }
        cout << endl;
        out << endl;
    }
}
int main()
{
    ofstream out;
    out.open("cipher_key.txt");
    if (!out.is_open())
    {
        cout << "fail to open data1.dat\n";
        return 1;
    }
    output(out);
    out.close();
}

 

标签:文件,const,int,++,Vector,实验,include,模板,size
From: https://www.cnblogs.com/zlaym/p/16942652.html

相关文章

  • Android实验——使用Intent在Activity间传输数据
    一、实验要求和目的理解Activity组件的功能与作用;掌握使用Intent在多个Activity组件间传输数据的方法;掌握在AndroidManifest.xml中配置Activity组件的方法。二、实验......
  • .Net Core 5.0 通过Swagger Api上传文件大小被限制,报error: request entity too large
    1、在Startup中添加以下代码publicvoidConfigureServices(IServiceCollectionservices){services.Configure<FormOptions>(options=>{//Setth......
  • linux中指定以指定的单位显示文件的大小
     001、以bp显示[root@PC1test]#lsa.map[root@PC1test]#ls-ltotal1228800-rw-r--r--.1rootroot1258291200Dec120:03a.map 002、以适当单位显示......
  • idea提交git时过滤掉不必要的文件
    idea提交git时过滤掉不必要的文件进入Preferences->plugins中下载一个(.ignore)插件在项目本地new一个(.gitignore)的文件新增需要过滤文件的后缀及文件夹使用gi......
  • linux 中如何统计指定目录下一类文件的总的大小
     001、[root@PC1test]#lsa.mapa.peda.txtb.pedb.txt[root@PC1test]#ll-htotal1.4G-rw-r--r--.1rootroot200MDec119:42a.map-rw-r--r--.1......
  • gatk 实现对vcf文件的合并
     001、测试数据[root@PC1test]#ls##测试数据seg1_1.vcfseg1_2.vcfseg1_3.vcf[root@PC1test]#ll-htotal1.2G-rw-r--r--.1......
  • Android实验——事件处理:显示持续触摸时间
    一、实验要求和目的掌握基于监听的事件处理机制,根据需求能够编写相应的事件处理程序。能够熟练应用各种布局管理器和控件进行界面设计。二、实验环境部署有Android......
  • web实验2
    基于华为鲲鹏云服务器CentOS中(或Ubuntu),使用LinuxSocket实现:1.Web服务器的客户端服务器,提交程序运行截图2.实现GET即可,请求,响应要符合HTTP协议规范ubuntu运行截图1.......
  • web实验1-socket
    基于华为鲲鹏云服务器CentOS中(或Ubuntu),使用LinuxSocket实现:1.time服务器的客户端服务器,提交程序运行截图timeserver代码#include<stdio.h>#include<unistd.h>#inc......
  • Java文件操作实例浅析
    Java文件操作实例浅析1.   实例一:创建文件和目录在java.io包中有一个专门用于文件操作的类File类。此类提供了文件很多操作,如创建文件、删除文件、创建目录、删除目录等......