首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 其他开发语言 >

matlab转c++的一段代码,需要动态插入数据的结构体怎么定义

2013-01-07 
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)即可.

热点排行