当前位置:实例文章 » HTML/CSS实例» [文章]【C++】vector类的模拟实现(增删查改,拷贝构造,赋值运算,深浅拷贝)

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

其他信息

其他资源

Top