当前位置:实例文章 » 其他实例» [文章]C++ —— STL容器【vector】模拟实现

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` 类,并且提供了示例代码。这个类支持随机访问、插入和删除元素,且提供了多种方法来操作数据。

相关标签:c++开发语言
其他信息

其他资源

Top