向量的原型

 

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

实验要求:

1.  画出对应的类图;

 

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

 

#include <iostream>

using namespace std;

 

// 向量类

class Vector {

private:

    int *p;  // 动态数组

    int len; // 数组长度

public:

    Vector(int len);                   // 构造函数

    Vector(const Vector &vector);      // 拷贝构造函数

    ~Vector();                         // 析构函数

    int operator[](int i) const { return p[i]; }  // 常量版本下标运算符

    int &operator[](int i) { return p[i]; }       // 非常量版本下标运算符

    int length() const { return len; } // 返回向量长度

};

 

// 构造函数

Vector::Vector(int len) : len(len) {

    p = new int[len](); // 使用 new 分配内存并初始化为 0

}

 

// 拷贝构造函数(深拷贝)

Vector::Vector(const Vector &vector) {

    this->len = vector.len; // 复制长度

    this->p = new int[len]; // 为新对象分配内存

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

        this->p[i] = vector.p[i]; // 逐个复制元素

    }

}

 

// 析构函数

Vector::~Vector() {

    delete[] p; // 释放动态分配的内存

}

 

// 打印函数

void display(const Vector &vector) {

    int len = vector.length();

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

        if (i == len - 1) {

            cout << vector[i] << endl;

        } else {

            cout << vector[i] << ", ";

        }

    }

}

 

int main() {

    Vector v1(10); // 创建一个大小为 10 的向量

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

        v1[i] = i; // 初始化向量

    }

 

    Vector v2 = v1; // 使用拷贝构造函数进行深拷贝

    v2[6] = 55;     // 修改 v2 的内容

    v2[2] = 20;     // 修改 v2 的内容

    cout << "深拷贝:" << endl;

    cout << "更改copyVector后vector的数据:" << endl;

    display(v1); // 显示 v1 的内容

    cout << "更改copyVector后copyVector的数据:" << endl;

    display(v2); // 显示 v2 的内容

    return 0;

}

posted @   涨涨涨张  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示