我仍在完善此处发布的技巧,请多多包涵,我将编辑和修复建议的任何内容!
我有一个家庭作业,需要我创建操纵向量的函数。“捕获”是传递给该函数的所有数据都是通过对该结构的引用传递的:
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指针指向在construct函数中创建的向量,并且无法终生搞清楚该如何做。
我正在尝试的示例:
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
必须指向向量的原因是因为数据是通过引用struct member传递给后续函数的v
:
void destroy_vector ( Vector & v );
void copy_data ( Vector & v );
编辑:我的问题是我误解了分配的目标,但我认为我收到的答案确实可以帮助人们理解动态内存以及应如何在函数中使用动态内存。因此,我将保留一切!
您在这里有两个问题:
std::vector<int> t(size,initVal);
*v.data = &t ; // ERROR: Assigning to 'int' from
首先,*v.data
和&t
是不同的类型,一种是int
,另一种是一个指向一个vector
的int
第
您可以使用它进行编译(但是您不应该,请参阅第二个问题)
v.data = t.data();
另一个问题是vector
该功能是本地的。一旦函数返回,您的指针就会悬空。
因此,针对您的问题的正确解决方案是使用动态数组:
v.data = new int[size];
使用完后,不要忘记delete[]
在结构的析构函数中使用它:
delete [] data;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句