向量的原型

 

用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 @ 2024-10-30 22:55  涨涨涨张  阅读(5)  评论(0编辑  收藏  举报