C++入门之stl六大组件--Vector库函数的介绍,以及模拟实现一些常用接口
发布人:shili8
发布时间:2025-03-12 21:40
阅读次数:0
**C++入门之STL六大组件——Vector库函数的介绍**
在C++中,STL(Standard Template Library)是标准模板库,它提供了一系列高级数据结构和算法,使得程序员能够更轻松地编写出高效、可维护的代码。其中,Vector是最常用的容器类之一,它提供了动态数组的功能。
**1. Vector库函数的介绍**
Vector库函数提供了以下几个主要接口:
* `push_back(T x)`:在vector尾部添加一个元素。
* `pop_back()`:从vector尾部删除一个元素。
* `insert(iterator pos, T x)`:在指定位置插入一个元素。
* `erase(iterator pos)`:从指定位置删除一个元素。
* `begin()`和`end()`:返回指向vector首位和尾部的迭代器。
* `size()`:返回vector中元素的数量。
**2. 模拟实现Vector库函数**
下面是模拟实现Vector库函数的代码:
cpp#include <iostream> using namespace std; class Vector { private: int capacity; int size_; T* data; public: // 构造函数,初始化容量和大小 Vector(int capacity =10) : capacity(capacity), size_(0), data(new T[capacity]) {} // 析构函数,释放内存 ~Vector() { delete[] data; } // 在vector尾部添加一个元素 void push_back(T x) { if (size_ == capacity) { // 如果容量已满,则扩容 T* newData = new T[capacity *2]; for (int i =0; i < size_; ++i) newData[i] = data[i]; delete[] data; data = newData; capacity *=2; } data[size_++] = x; } // 从vector尾部删除一个元素 void pop_back() { if (size_ >0) { size_--; } } // 在指定位置插入一个元素 void insert(int pos, T x) { if (pos < 0 || pos > size_) { cout << "Invalid position!" << endl; return; } if (size_ == capacity) { // 如果容量已满,则扩容 T* newData = new T[capacity *2]; for (int i =0; i < pos; ++i) newData[i] = data[i]; newData[pos] = x; for (int i = pos +1; i <= size_; ++i) newData[i] = data[i -1]; delete[] data; data = newData; capacity *=2; } else { // 移动后面的元素 for (int i = size_; i > pos; --i) { data[i] = data[i -1]; } data[pos] = x; size_++; } } // 从指定位置删除一个元素 void erase(int pos) { if (pos < 0 || pos >= size_) { cout << "Invalid position!" << endl; return; } for (int i = pos; i < size_ -1; ++i) data[i] = data[i +1]; size_--; } // 返回指向vector首位的迭代器 T* begin() { return data; } // 返回指向vector尾部的迭代器 T* end() { return data + size_; } // 返回vector中元素的数量 int size() { return size_; } };
**3. 使用示例**
cppint main() { Vector vec; vec.push_back(10); vec.push_back(20); vec.push_back(30); cout << "Size: " << vec.size() << endl; vec.insert(1,15); cout << "Vector after insertion: "; for (T* it = vec.begin(); it != vec.end(); ++it) cout << *it << " "; vec.erase(2); cout << " Vector after deletion: "; for (T* it = vec.begin(); it != vec.end(); ++it) cout << *it << " "; return0; }
上述代码演示了如何使用Vector库函数来实现动态数组的功能。