C++ —— STL容器【vector】模拟实现
发布人:shili8
发布时间:2025-03-01 02:37
阅读次数:0
**C++ —— STL容器【vector】模拟实现**
在 C++ 中,STL(Standard Template Library)提供了多种高级容器类,如 `vector`、`list`、`map` 等。这些容器类为我们提供了一种方便的方式来管理和操作数据。在本文中,我们将重点讨论 `vector` 容器类,并模拟实现一个简单的 `vector` 类。
**1. vector 的基本概念**
`vector` 是一种动态数组,支持随机访问、插入和删除元素。它提供了多种方法来操作数据,如 `push_back()`、`pop_back()`、`insert()` 等。
**2. vector 的模拟实现**
我们将使用 C++语言来模拟实现一个简单的 `vector` 类。下面是我们的实现代码:
cpp#include <iostream> // 定义一个简单的 vector 类class Vector { private: int* data; // 数据指针 int size_; // 当前大小 int capacity_; // 容量public: // 构造函数 Vector(int initialCapacity =10) : size_(0), capacity_(initialCapacity) { data = new int[capacity_]; } // 析构函数 ~Vector() { delete[] data; } // 添加元素到末尾 void push_back(int value) { if (size_ == capacity_) { // 如果容量已满,扩容 capacity_ *=2; int* newData = new int[capacity_]; for (int i =0; i < size_; ++i) { newData[i] = data[i]; } delete[] data; data = newData; } data[size_] = value; ++size_; } // 删除末尾元素 void pop_back() { if (size_ >0) { --size_; } } // 插入元素到指定位置 void insert(int index, int value) { if (index < 0 || index > size_) { throw std::out_of_range("Index out of range"); } if (size_ == capacity_) { // 如果容量已满,扩容 capacity_ *=2; int* newData = new int[capacity_]; for (int i =0; i < index; ++i) { newData[i] = data[i]; } for (int i = index; i < size_; ++i) { newData[i +1] = data[i]; } delete[] data; data = newData; } for (int i = size_; i > index; --i) { data[i] = data[i -1]; } data[index] = value; ++size_; } // 获取元素 int at(int index) const { if (index < 0 || index >= size_) { throw std::out_of_range("Index out of range"); } return data[index]; } // 获取大小 int size() const { return size_; } // 获取容量 int capacity() const { return capacity_; } };
**3.代码注释**
* `Vector` 类的构造函数中,我们初始化了数据指针 `data`、当前大小 `size_` 和容量 `capacity_`。
* 析构函数中,我们释放了动态分配的内存。
* `push_back()` 函数中,我们添加元素到末尾,并且如果容量已满,扩容。
* `pop_back()` 函数中,我们删除末尾元素。
* `insert()` 函数中,我们插入元素到指定位置,并且如果容量已满,扩容。
* `at()` 函数中,我们获取元素。
* `size()` 和 `capacity()` 函数中,我们返回当前大小和容量。
**4. 示例代码**
cppint main() { Vector vec; vec.push_back(10); vec.push_back(20); vec.push_back(30); std::cout << "Size: " << vec.size() << std::endl; // Size:3 std::cout << "Capacity: " << vec.capacity() << std::endl; // Capacity:20 vec.insert(1,25); std::cout << "Element at index1: " << vec.at(1) << std::endl; // Element at index1:25 vec.pop_back(); std::cout << "Size after pop_back(): " << vec.size() << std::endl; // Size after pop_back():2 return0; }
在本文中,我们模拟实现了一个简单的 `vector` 类,并且提供了示例代码。这个类支持随机访问、插入和删除元素,且提供了多种方法来操作数据。