【C++】vector类的模拟实现(增删查改,拷贝构造,赋值运算,深浅拷贝)
发布人:shili8
发布时间:2025-03-05 22:20
阅读次数:0
**C++ 中 vector 类的模拟实现**
在 C++ 中,`vector` 是一个非常重要的容器类,它提供了动态数组的功能。然而,在实际开发中,我们可能需要自己实现一个 `vector` 类来满足特定的需求。在本文中,我们将尝试模拟实现一个 `vector` 类,包括增删查改、拷贝构造、赋值运算和深浅拷贝。
###1. vector 类的基本结构首先,我们需要定义 `vector` 类的基本结构。我们可以使用一个 `T*` 指针数组来存储元素,以及一个 `size_t` 变量来记录当前容器中的元素数量。
cpptemplate <typename T>
class Vector {
public:
// 构造函数 Vector(size_t capacity =0) : _capacity(capacity), _size(0), _data(new T[capacity]) {}
// 拷贝构造函数 Vector(const Vector& other) : _capacity(other._capacity), _size(other._size), _data(new T[_capacity]) {
for (size_t i =0; i < _size; ++i) {
_data[i] = other._data[i];
}
}
// 赋值运算符 Vector& operator=(const Vector& other) {
if (this != &other) {
delete[] _data;
_capacity = other._capacity;
_size = other._size;
_data = new T[_capacity];
for (size_t i =0; i < _size; ++i) {
_data[i] = other._data[i];
}
}
return *this;
}
private:
size_t _capacity; // 容器的最大容量 size_t _size; // 当前容器中的元素数量 T* _data; // 元素存储数组};
###2. 增删查改接下来,我们需要实现增删查改的功能。我们可以使用以下函数来完成这些操作:
cpp// 插入元素void insert(size_t index, const T& value) {
if (index > _size) {
throw std::out_of_range("Index out of range");
}
if (_size == _capacity) {
// 扩容 size_t newCapacity = _capacity *2;
T* newData = new T[newCapacity];
for (size_t i =0; i < index; ++i) {
newData[i] = _data[i];
}
newData[index] = value;
for (size_t i = index +1; i <= _size; ++i) {
newData[i] = _data[i -1];
}
delete[] _data;
_capacity = newCapacity;
_data = newData;
} else {
// 直接插入 for (size_t i = _size; i > index; --i) {
_data[i] = _data[i -1];
}
_data[index] = value;
++_size;
}
}
// 删除元素void erase(size_t index) {
if (index >= _size) {
throw std::out_of_range("Index out of range");
}
for (size_t i = index; i < _size -1; ++i) {
_data[i] = _data[i +1];
}
--_size;
}
// 查找元素T& at(size_t index) {
if (index >= _size) {
throw std::out_of_range("Index out of range");
}
return _data[index];
}
###3. 拷贝构造和赋值运算我们已经在 `Vector` 类的基本结构中实现了拷贝构造函数和赋值运算符。
###4. 深浅拷贝深浅拷贝是指将一个对象复制到另一个对象中,或者说是将一个对象的内容复制到另一个对象中。我们可以使用以下函数来实现深浅拷贝:
cpp// 深拷贝VectordeepCopy() const { Vector copy(_capacity); for (size_t i =0; i < _size; ++i) { copy._data[i] = _data[i]; } return copy; } // 浅拷贝Vector & shallowCopy(Vector & other) { if (this != &other) { delete[] _data; _capacity = other._capacity; _size = other._size; _data = new T[_capacity]; for (size_t i =0; i < _size; ++i) { _data[i] = other._data[i]; } } return *this; }
### 总结在本文中,我们尝试模拟实现了一个 `vector` 类,包括增删查改、拷贝构造、赋值运算和深浅拷贝。我们使用一个 `T*` 指针数组来存储元素,以及一个 `size_t` 变量来记录当前容器中的元素数量。通过实现这些功能,我们可以在实际开发中使用这个 `vector` 类来满足特定的需求。
当然,这个 `vector` 类还有很多地方需要改进和优化,例如性能、安全性等方面。但是,在本文的范围内,我们已经尝试了一个基本的实现。

