📅  最后修改于: 2023-12-03 15:07:52.163000             🧑  作者: Mango
本文将介绍如何在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++中创建自定义矢量类的程序,并通过测试程序检验了自定义矢量类的功能。