自定义向量类。具体要求如下。 (1) 向量的维数可缩放; (2) 对象构造、析构、赋值相关的四大函数;(每个同学必须会写) (3) 其他成员函数(如:返回维数等)
时间: 2024-10-10 10:07:46 浏览: 25
自定义向量类,我们可以称为`ResizableVector`,它允许动态调整其维度,并提供基本的构造、析构、赋值操作。以下是满足上述要求的一个示例实现:
```cpp
#include <iostream>
#include <vector>
template <typename T, size_t Dim>
class ResizableVector {
public:
// 构造函数,初始化一个空向量
ResizableVector() : data_(Dim, T()), dimensions_(Dim) {}
// 析构函数,释放内存
~ResizableVector() {
clear();
}
// 复制构造函数
ResizableVector(const ResizableVector<T, Dim>& other) : data_(other.data_), dimensions_(other.dimensions_) {
}
// 赋值运算符,将另一个向量的内容复制到此向量
ResizableVector<T, Dim>& operator=(const ResizableVector<T, Dim>& other) {
if (this != &other) {
data_ = other.data_;
dimensions_ = other.dimensions_;
}
return *this;
}
// 指定维度并初始化向量
void initialize(size_t new_dim) {
if (new_dim > dimensions_) {
resize(new_dim);
}
dimensions_ = new_dim;
}
// 返回当前的维数
size_t get_dimensions() const {
return dimensions_;
}
// 返回指定维度的数据
T* operator[](size_t dim) {
if (dim < dimensions_) {
return &data_[dim];
} else {
throw std::out_of_range("Index out of bounds");
}
}
// 返回只读指定维度的数据
const T* operator[](size_t dim) const {
if (dim < dimensions_) {
return &data_[dim];
} else {
throw std::out_of_range("Index out of bounds");
}
}
private:
// 动态扩容
void resize(size_t new_dim) {
data_.resize(new_dim * sizeof(T));
dimensions_ = new_dim;
}
std::vector<T> data_; // 存储数据的二维数组
size_t dimensions_; // 当前的维数
};
// 示例用法
int main() {
ResizableVector<int, 2> vec1;
vec1.initialize(3); // 初始化为3维
vec1[0][1] = 10; // 设置元素
std::cout << "Dimensions: " << vec1.get_dimensions() << std::endl;
ResizableVector<int, 3> vec2(vec1); // 从vec1复制构造
return 0;
}
```
阅读全文