首页 > 其他分享 >10.21日报

10.21日报

时间:2024-11-27 10:23:19浏览次数:9  
标签:10.21 capacity 日报 double Vector data other size

上午进行了软件设计的实验课,以下为实验内容:

实验6:原型模式

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:

1、理解原型模式的动机,掌握该模式的结构;

2、能够利用原型模式解决实际问题。

 
   

 

 

[实验任务一]:向量的原型

用C++完成数学中向量的封装,其中,用指针和动态申请支持向量长度的改变,使用浅克隆和深克隆复制向量类,比较这两种克隆方式的异同。

实验要求:

1.  画出对应的类图;

 

2.提交源代码(用C++完成);

#include <iostream>

#include <cstring>

 

class Vector {

private:

    double* data; // 动态数组

    int size;    // 当前大小

    int capacity; // 容量

 

public:

    // 构造函数

    Vector() : data(nullptr), size(0), capacity(0) {}

 

    // 带初始大小的构造函数

    Vector(int initialSize) {

        size = initialSize;

        capacity = initialSize;

        data = new double[capacity];

    }

 

    // 析构函数

    ~Vector() {

        delete[] data;

    }

 

    // 改变大小

    void resize(int newSize) {

        if (newSize > capacity) {

            double* newData = new double[newSize];

            std::memcpy(newData, data, size * sizeof(double));

            delete[] data;

            data = newData;

            capacity = newSize;

        }

        size = newSize;

    }

 

    // 深克隆

    Vector deepClone() const {

        Vector clonedVector(size);

        std::memcpy(clonedVector.data, data, size * sizeof(double));

        return clonedVector;

    }

 

    // 浅克隆

    Vector(const Vector& other) : data(nullptr), size(other.size), capacity(other.capacity) {

        if (other.data) {

            data = new double[capacity];

            std::memcpy(data, other.data, size * sizeof(double));

        }

    }

 

    // 赋值运算符

    Vector& operator=(const Vector& other) {

        if (this != &other) {

            if (capacity < other.size) {

                delete[] data;

                capacity = other.capacity;

                data = new double[capacity];

            }

            size = other.size;

            std::memcpy(data, other.data, size * sizeof(double));

        }

        return *this;

    }

 

    // 下标运算符

    double& operator[](int index) {

        return data[index];

    }

 

    // 常量下标运算符

    const double& operator[](int index) const {

        return data[index];

    }

};

 

int main() {

    Vector vec1(5);

    for (int i = 0; i < 5; ++i) {

        vec1[i] = i;

    }

 

    // 浅克隆

    Vector vec2 = vec1;

    std::cout << "Shallow Clone: ";

    for (int i = 0; i < 5; ++i) {

        std::cout << vec2[i] << " ";

    }

    std::cout << std::endl;

 

    // 深克隆

    Vector vec3 = vec1.deepClone();

    std::cout << "Deep Clone: ";

    for (int i = 0; i < 5; ++i) {

        std::cout << vec3[i] << " ";

    }

    std::cout << std::endl;

 

    return 0;

}#include <iostream>

#include <cstring>

 

class Vector {

private:

    double* data; // 动态数组

    int size;    // 当前大小

    int capacity; // 容量

 

public:

    // 构造函数

    Vector() : data(nullptr), size(0), capacity(0) {}

 

    // 带初始大小的构造函数

    Vector(int initialSize) {

        size = initialSize;

        capacity = initialSize;

        data = new double[capacity];

    }

 

    // 析构函数

    ~Vector() {

        delete[] data;

    }

 

    // 改变大小

    void resize(int newSize) {

        if (newSize > capacity) {

            double* newData = new double[newSize];

            std::memcpy(newData, data, size * sizeof(double));

            delete[] data;

            data = newData;

            capacity = newSize;

        }

        size = newSize;

    }

 

    // 深克隆

    Vector deepClone() const {

        Vector clonedVector(size);

        std::memcpy(clonedVector.data, data, size * sizeof(double));

        return clonedVector;

    }

 

    // 浅克隆

    Vector(const Vector& other) : data(nullptr), size(other.size), capacity(other.capacity) {

        if (other.data) {

            data = new double[capacity];

            std::memcpy(data, other.data, size * sizeof(double));

        }

    }

 

    // 赋值运算符

    Vector& operator=(const Vector& other) {

        if (this != &other) {

            if (capacity < other.size) {

                delete[] data;

                capacity = other.capacity;

                data = new double[capacity];

            }

            size = other.size;

            std::memcpy(data, other.data, size * sizeof(double));

        }

        return *this;

    }

 

    // 下标运算符

    double& operator[](int index) {

        return data[index];

    }

 

    // 常量下标运算符

    const double& operator[](int index) const {

        return data[index];

    }

};

 

int main() {

    Vector vec1(5);

    for (int i = 0; i < 5; ++i) {

        vec1[i] = i;

    }

 

    // 浅克隆

    Vector vec2 = vec1;

    std::cout << "Shallow Clone: ";

    for (int i = 0; i < 5; ++i) {

        std::cout << vec2[i] << " ";

    }

    std::cout << std::endl;

 

    // 深克隆

    Vector vec3 = vec1.deepClone();

    std::cout << "Deep Clone: ";

    for (int i = 0; i < 5; ++i) {

        std::cout << vec3[i] << " ";

    }

    std::cout << std::endl;

 

    return 0;

}

3.注意编程规范。

标签:10.21,capacity,日报,double,Vector,data,other,size
From: https://www.cnblogs.com/lijianlongCode13/p/18571715

相关文章

  • 10.17日报
    今天进行了机器学习B的实验,以下为实验内容:上机实验一:数据准备与模型评估1、实验目的熟悉Python的基本操作,掌握对数据集的读写实现、对模型性能的评估实现的能力;加深对训练集、测试集、N折交叉验证、模型评估标准的理解。2、实验内容(1)利用pandas库从本地读取iris数据......
  • 10.16日报
    上午上了软件设计的课,进行了软件设计的实验实验4:抽象工厂模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解抽象工厂模式的动机,掌握该模式的结构;2、能够利用抽象工厂模式解决实际问题。     [实验任务一]:人与肤色使用抽象工厂模式,完成下......
  • 10.15日报
    今天进行了mes系统的开发的学习,了解了mes系统开发的主要步骤,要明确目标,弄清楚需求分析报告的要求,并且设置对应的数据库,并且了解了如何绘制上下文图。下午完成软件设计实验以下为实验内容实验3:工厂方法模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解工厂方......
  • Runway 新增视频扩展画面功能;Anthropic 再获亚马逊投资 40 亿美元,聚焦 AI 芯片研发丨
      开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑......
  • 70 个群都来问我的 AI 日报,是这么做的。
    最近我给FastGPT用户交流群里接入了AI日报,每天早上10点会自动向群里推送AI日报,让群里的小伙伴们第一时间了解到昨天AI领域都发生了哪些大事。效果大概是这个样子的:如果你对FastGPT感兴趣,可以直接扫码入群:除此之外,我还同步一份到公司的飞书群里,这样公司的小伙伴们......
  • Swarm 框架登场:OpenAI 第 3 阶段「敲门砖」;马斯克的 Teslabot 实际有人远程操控丨 RTE
       开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编......
  • 字节预热智能硬件 Ola Friend,预计为智能耳机;鸿蒙 NEXT 公测正式开启,微信邀请内测丨RTE
       开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。 我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代......
  • 大模型日报|16 篇必读的大模型论文
    大家好,今日必读的大模型论文来啦!1.微软、清华团队提出DiffTransformerTransformer往往会将注意力过度分配到不相关的上下文中。在这项工作中,来自微软研究院和清华大学的研究团队提出了DiffTransformer,它可以在消除噪音的同时放大对相关上下文的注意力。具体来说,差......
  • 实时语音交互中文基准首期测评出炉;美取消 SB-1047 法案,大模型厂商大难不死丨 RTE 开发
       开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编......
  • OpenAI以1500亿美元公司估值向投资者筹集65亿美元!安卓版谷歌Gemini Live免费上线|AI日
    文章推荐突发!OpenAI「Her」领头人离职!字节硬件与豆包联动,预推出AI耳机、眼镜等产品|AI日报今日热点安卓版谷歌GeminiLive免费上线据科技媒体9to5Google报道,谷歌在1个月前面向Advanced订阅用户推出后,正逐步面向所有安卓用户免费开放GeminiLive。GeminiLive采用了增强型语音引擎,可......