所以我創建並初始化一個向量(大小爲nmask + 3)爲0,並且我爲其中一個元素分配了一個初始值。然後我創建一個for循環,它遍歷向量的第一個nmask元素,並向每個元素賦予向量中平均26個其他元素(由包含向量地址的4D int數組voxt定義)。C++向量在嵌套for循環中不更新
我的問題是,當我檢查嵌套循環(第一個cout)中的向量(phi)中的非零元素的值時,值很好,我期望的。但是,當循環完成所有nmask元素(for (int i= 0; i<nmask; i++)
出口)時,我再次檢查phi的非零元素,並且除了最後一個非零元素(以及手動元素tvox)外,它們全部丟失(重置爲0)設置爲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;
}
}
....哇,這是一個有趣的聖誕樹 – sehe
muximam cyclomatic複雜性。 – slaphappy
忘記它,只需重寫代碼,使其不嵌套如此之深。 –