如何设法在 C++ 中创建矢量类?

Posted

技术标签:

【中文标题】如何设法在 C++ 中创建矢量类?【英文标题】:How do I manage to create a vector class in c++? 【发布时间】:2017-10-16 19:47:41 【问题描述】:

我被介绍给指针,我很明白。但我不知道如何使用指针将变量存储在向量类中。

这是我的理解,但我应该如何完成它?

class Vector
    int size;       
    int* element; 

    public:
    vector(int x); 

    int size() const  return size 
;

【问题讨论】:

想想你将如何实现你的构造函数、复制构造函数和析构函数。 std::vector<std::unique_ptr<MyFavouriteClass>>? 你可以很容易地搜索这方面的例子。或者向你的老师/教授/助教寻求帮助(这就是他们的目的)。 您需要为您的元素动态分配内存。你所拥有的只是一个未初始化的指针。 【参考方案1】:

首先,您需要定义一个值来存储当前大小(向量内的元素数量),以便能够在向量的末尾添加值。

int curr_vec_size;

另外,向量的实际大小应该保存在一个变量中,以便在每次添加分配内存未满的值时检查

int memory_size;

其次,需要在构造函数中使用“new”动态分配内存

    vector(int size)

    element = new int[size];        //allocating memory (array of integers)
    memory_size= size;              //size of allocated memory
    curr_vec_size= 0;               //no values in the vector 

然后您可以创建一个方法,该方法接受一个 int 值并将其添加到动态数组中。

    void add_value(int passed_val)

    if(curr_vec_size < memory_size)
    
        element[curr_vec_size]=passed_val;    //adding the value in the vector
        curr_vec_size ++;                     //because you have added a new value
    
    else 
        cout<<"vector is full \n";

最后,不要忘记使用析构函数删除已分配的内存,该析构函数会删除指向已分配内存的指针。

vector()

   delete[] element;

【讨论】:

【参考方案2】:

要完成您开始的工作,您只需使用new[] 运算符分配内存来存储您的int 值:

vector(int x)

    size = x;
    element = new int[size]; // this allocates an array of int with a size of "size"

然后,您可以使用 element[i] 访问数组中 i 的元素。

您稍后需要(必须)通过实现析构函数来释放分配的内存以防止内存泄漏:

~vector()

    delete [] element;

请注意,您还应该(必须)还至少遵循 3 的规则,以使您的矢量可复制。

【讨论】:

附录:不要忘记三法则。 What is The Rule of Three?点击链接一探究竟! @user4581301:我提到过;-) 所以你做到了。我很抱歉。

以上是关于如何设法在 C++ 中创建矢量类?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中创建向量的向量图?

在 C++ 中创建 OpenCV 矢量并存储到文本文件

如何在 C++ 中创建一个类的多个实例

如何在 C++ 中创建类对象的向量?

如何在 C++ 中的类中创建对象?

如何在 C++ 中创建一个作为另一个类的向量的类?