如何在C++中实现自己的向量类
给定任务是在C++中实现一个类,它的行为就像向量类。
向量与动态数组相同,但具有在插入或删除元素时自动调整大小的能力,并且其存储由容器自动处理。向量元素放置在连续存储中,以便使用迭代器访问和遍历它们。在向量中,数据插入到末尾。在末尾插入需要差异时间,因为有时需要扩展数组。删除最后一个元素仅需要常数时间,因为不会发生调整大小。在开头或中间插入和删除是线性时间。
我们还可以使用模板使向量类通用。
我们将要实现的与向量关联的一些函数包括:
- void push(int data) :此函数接受一个元素并将其插入到末尾。平摊时间复杂度为O(1)。
- void push(int data, int index) :它将数据插入到指定的索引处。时间复杂度为O(1)。
- int get(int index) :它用于获取指定索引处的元素。时间复杂度为O(1)。
- void pop() :它删除最后一个元素。时间复杂度为O(1)。
- int size() :它返回向量的大小,即向量中的元素数量。时间复杂度为O(1)。
- int getcapacity() :它返回向量的容量。时间复杂度为O(1)。
- void print() :它用于打印数组元素。时间复杂度为O(N),其中N是向量的大小。
以下是我们自己的向量类的实现。
// 自己实现的
// C ++中的向量类
#include
using namespace std;
template class vectorClass {
// arr是整数指针
// 存储向量的地址
T *arr;
// capacity是总存储
// 向量的容量
int capacity;
// current是元素数
// 当前存在于向量中
int current;
public:
// 默认构造函数来初始化
// 最初的容量为1个元素和
// 使用动态分配分配存储
vectorClass()
{
arr = new T[1];
capacity = 1;
current = 0;
}
// 析构函数来分配由动态分配分配的存储
// 防止内存泄漏
~vectorClass()
{
delete[] arr;
}
// 在最后添加元素的函数
void push(T data)
{
// 如果元素数量等于
// 容量,这意味着我们没有空间
// 容纳更多元素。我们需要加倍
// 容量
if (current == capacity) {
T *temp = new T[2 * capacity];
// 将旧数组元素复制到新数组
for (int i = 0; i v;
vectorClass v1;
v.push(10);
v.push(20);
v.push(30);
v.push(40);
v.push(50);
v1.push(71);
v1.push(72);
v1.push(73);
v1.push(74);
cout << "向量大小: " << v.size() << endl;
cout << "向量容量: " << v.getcapacity() << endl;
cout << "向量元素: ";
v.print();
v.push(100, 1);
cout << "\n更新第一索引后" << endl;
cout << "int类型的向量元素:" << endl;
v.print();
// 这是可能的,因为我们使用了模板
cout << "char类型的向量元素:" << endl;
v1.print();
cout << "第一索引的int类型元素:" << v.get(1)
<< endl;
cout << "第一索引的char类型元素:"
<< v1.get(1) << endl;
v.pop();
v1.pop();
cout << "\n删除最后一个元素后" << endl;
cout << "int类型向量的大小:" << v.size() << endl;
cout << "char类型向量的大小:" << v1.size()
<< endl;
cout << "int类型的向量容量:"
<< v.getcapacity() << endl;
cout << "char类型的向量容量:"
<< v1.getcapacity() << endl;
cout << "int类型的向量元素:";
v.print();
cout << "char类型的向量元素:";
v1.print();
return 0;
}
输出
向量大小:5
向量容量:8
向量元素:10 20 30 40 50
更新第一个索引后
int类型的向量元素:
10 100 30 40 50
char类型的向量元素:
G H I J
第一个索引上的int类型元素:100
第一个索引上的char类型元素:H
删除最后一个元素后
int类型的向量大小:4
char类型的向量大小:3
int类型的向量容量:8
char类型的向量容量:4
int类型的向量元素:10 100 30 40
char类型的向量元素:G H I