matlab转c++的一段代码,需要动态插入数据的结构体如何定义?i0fi0while iMaxIter&&fiMaxCorrii+1lo
matlab转c++的一段代码,需要动态插入数据的结构体如何定义?
i=0;
fi=0;
while i<MaxIter&&fi<MaxCorr
i=i+1;
logs.corr(i)=fi;
logs.obj(i,:)=func(u); %func(u)返回一个1*3的数组
end
转换成C++代码时该如何定义logs结构体?
struct logs
{
double corr[MaxIter]; //这样肯定不行
double obj[MaxIter][3]; //同上
}
[解决办法]matlab的在struct上有点很明显,因为可以动态指定fields,名称,值都能动态添加.
c++不能这样.你在定义logs这个结构体的时候,需要事先声明需要大小的数组才行
3个办法:
1. 定义个一个常量MAX_ITER,常量的值你需要从matlab运行结果来观察,然后用他去定义log结构体中的数组;
2. log中定义成double *corr和double **obj,但是即使这样,在需要初始化log的时候,你仍然必须初始化这2个指针,这时候也需要max_iter这个值,所以2种办法其实是一样的.
3. 最后一种办法就是利用c++中的变长容器,vector或者list,你的结构体定义可能需要改变为:
struct logs
{
double data[4]; // 1*4,data[0]是corr,data[2]-data[4]表示obj的1*3
}
然后在需要循环中你只需要不停的vector <logs>.push_back(new_logs)即可.