【发布时间】:2020-03-07 20:08:43
【问题描述】:
我仍在完善在这里发帖的艺术,所以请耐心等待,我会编辑和修复任何建议!
我有一个作业要求我创建操作向量的函数。 “catch”是传递给函数的所有数据都是通过引用这个结构来传递的:
struct Vector { // this struct must stay as is
int sze = 0; // "size" took out i for compatability
int capacity = 0;
int * data = nullptr ;
}a,b,c;
即
void construct_vector ( Vector& v, int size= 0, int initVal= 0);
我遇到的问题出在函数construct_vector() 中,你猜对了,我必须构造一个向量并使用int* data 指向堆上的向量?我对最后一部分并不积极)。我只知道我必须使用 int 指针指向在构造函数中创建的向量,并且我一生都无法弄清楚如何做到这一点。
我正在尝试的示例:
void construct_vector ( Vector &v, int size, int initVal){
std::vector<int> t(size,initVal);
*v.data = &t ; // ERROR: Assigning to 'int' from incompatible type 'std::vector<int> *'
v.capacity = size; //
v.sze = size;
for (int i=0; i < t.size(); i++){
/* I originally tried to implement a
dynamic int pointer here but I cannot change int* data
to int*data[sze] within the struct*/
}
}
int * data之所以必须指向向量,是因为数据是通过引用结构成员v传递给后续函数的:
void destroy_vector ( Vector & v );
void copy_data ( Vector & v );
编辑:我的问题是我误解了我的任务目标,但我认为我收到的答案真的可以帮助人们理解动态内存以及它应该如何在函数中使用。所以我要保持原样!
【问题讨论】:
-
我认为你不应该使用
std::vector,而是自己复制它的功能。 -
如果你希望数组/向量在函数之后存在,它必须在堆上声明。不知道为什么你在这里有一个本地向量。为什么不直接做
v.data = new int[size]?
标签: c++ pointers vector struct dynamic-memory-allocation