如何在C++中实现自己的向量类

如何在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   

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程