【发布时间】:2011-09-26 08:34:28
【问题描述】:
因此,我创建了一个向量(大小为 nmask+3)并将其初始化为 0,并为其中一个元素分配了一个初始值。然后,我创建了一个 for 循环,该循环遍历向量的第一个 nmask 元素,并为每个元素分配向量中 26 个其他元素的平均值(由包含向量地址的 4D int 数组 voxt 定义)。
我的问题是,当我在嵌套循环(第一个 cout)中检查向量 (phi) 中非零元素的值时,这些值很好,符合我的预期。但是,当循环完成遍历所有 nmask 元素(for (int i= 0; i<nmask; i++) 退出)时,我再次检查 phi 的非零元素,它们都丢失了(重置为 0),除了最后一个非零元素(和元素 tvox手动设置为 1)。
我觉得由于 phi 是在所有循环之外初始化的,因此不应该重置值,并且嵌套循环中的任何更新元素都应该在循环退出时保持更新。关于发生了什么/如何解决这个问题的任何想法?代码如下;我试图就我得到的输出发表评论。提前致谢。
vector<double> phi(nmask+3, 0); //vector with nmask+3 elements all set to 0 (nmask = 13622)
phi[tvox]= 1; //tvox is predefined address (7666)
for (int n= 0; n<1; n++)
{
vector<double> tempPhi(phi); //copy phi to tempPhi
for (int i= 0; i<nmask; i++)
{
for (int a= -1; a<=1; a++)
{
for (int b= -1; b<=1; b++)
{
for (int c= -1; c<=1; c++)
{
if (!(a==0 && b==0 && c==0))
{
//oneD26 is just (double) 1/26
phi[i]= tempPhi[i]+oneD26*tempPhi[voxt[i][1+a][1+b][1+c]];
if (phi[i]!=0)
{
//this gives expected results: 27 nonzero elements (including tvox)
cout << n << " " << i << " " << a << b << c << " " << phi[i] << endl;
}
}
}
}
}
}
phi[svox]= 0; //svox = 7681
phi[tvox]= 1;
for (int q= 0; q<nmask; q++)
{
//this gives only 2 nonzero values: phi[tvox] and phi[9642], which was the last nonzero value from 1st cout
if (phi[q]!=0)
cout << q << " " << phi[q] << endl;
}
}
【问题讨论】:
-
....哇,这棵圣诞树很有趣
-
muximam 圈复杂度。
-
算了,改写代码就不会嵌套那么深了。
标签: c++ vector for-loop nested