【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` 类还有很多地方需要改进和优化,例如性能、安全性等方面。但是,在本文的范围内,我们已经尝试了一个基本的实现。