📜  在C ++中创建自定义矢量类的程序(1)

📅  最后修改于: 2023-12-03 15:07:52.163000             🧑  作者: Mango

在C++中创建自定义矢量类的程序

本文将介绍如何在C++中创建自定义矢量类的程序。

简介

矢量(Vector)是一种常用的数据结构,由多个元素组成。在C++标准模板库中,已经提供了vector容器,我们可以使用它来管理矢量类。但这并不妨碍我们去自定义一个矢量类,从而更好地理解矢量的本质。

项目结构

在创建自定义矢量类的程序之前,我们需要先建立一个C++项目,并创建相应的工程和源文件。我们可以按照下面的项目结构组织项目:

custom_vector/
├── include/
│   └── vector.h
├── src/
│   └── vector.cpp
└── main.cpp

其中,include目录下存放头文件vector.h,src目录下存放源文件vector.cpp,main.cpp文件用于测试自定义矢量类的程序。

定义矢量类

我们将自定义的矢量类命名为Vector,头文件vector.h中定义如下:

#ifndef CUSTOM_VECTOR_VECTOR_H
#define CUSTOM_VECTOR_VECTOR_H

class Vector {
public:
    // 构造函数
    Vector(int size = 0);
    // 拷贝构造函数
    Vector(const Vector &rhs);
    // 析构函数
    ~Vector();

    // 赋值运算符
    Vector &operator=(const Vector &rhs);
    // 按索引访问元素
    int &operator[](int index);

    // 返回元素个数
    int size() const;
    // 判断是否为空
    bool empty() const;
    // 清空所有元素
    void clear();

private:
    // 存储元素的数组指针
    int *_data;
    // 元素个数
    int _size;
};

#endif //CUSTOM_VECTOR_VECTOR_H

可以看到,我们定义了矢量类Vector和它的成员函数。其中,构造函数、拷贝构造函数、析构函数、赋值运算符和按索引访问元素是矢量类的基本操作,size、empty和clear是一些常用的辅助操作。

实现矢量类

在源文件vector.cpp中,我们实现了Vector类的成员函数。具体实现如下:

#include "vector.h"

#include <cstring>

// 构造函数
Vector::Vector(int size) : _data(new int[size]), _size(size) {}

// 拷贝构造函数
Vector::Vector(const Vector &rhs) : _data(new int[rhs._size]), _size(rhs._size) {
    memcpy(_data, rhs._data, sizeof(int) * _size);
}

// 析构函数
Vector::~Vector() {
    delete[] _data;
}

// 赋值运算符
Vector &Vector::operator=(const Vector &rhs) {
    if (this != &rhs) {
        // 释放原有的资源
        delete[] _data;
        // 分配新的资源
        _data = new int[rhs._size];
        _size = rhs._size;
        // 复制元素
        memcpy(_data, rhs._data, sizeof(int) * _size);
    }
    return *this;
}

// 按索引访问元素
int &Vector::operator[](int index) {
    return _data[index];
}

// 返回元素个数
int Vector::size() const {
    return _size;
}

// 判断是否为空
bool Vector::empty() const {
    return _size == 0;
}

// 清空所有元素
void Vector::clear() {
    delete[] _data;
    _data = nullptr;
    _size = 0;
}
测试程序

最后,我们编写测试程序main.cpp,测试自定义的矢量类是否可用:

#include <iostream>
#include "vector.h"

using namespace std;

int main() {
    Vector v(3);
    v[0] = 1;
    v[1] = 2;
    v[2] = 3;
    cout << v[0] << "," << v[1] << "," << v[2] << endl;

    Vector w = v;
    w[0] = 4;
    cout << v[0] << "," << v[1] << "," << v[2] << endl;
    cout << w[0] << "," << w[1] << "," << w[2] << endl;

    Vector x;
    x = w;
    cout << x[0] << "," << x[1] << "," << x[2] << endl;

    x.clear();
    cout << x.size() << "," << x.empty() << endl;

    return 0;
}

运行结果如下:

1,2,3
1,2,3
4,2,3
4,2,3
0,1
总结

通过本篇文章的学习,我们掌握了如何在C++中创建自定义矢量类的程序,并通过测试程序检验了自定义矢量类的功能。