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库函数来实现动态数组的功能。

