如何设法在 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++ 中创建矢量类?的主要内容,如果未能解决你的问题,请参考以下文章