Итак, я создаю и инициализирую вектор (размером nmask + 3) в 0 и назначаю начальное значение одному из элементов. Затем я создаю цикл for, который проходит через первые nmask-элементы вектора и присваивает каждому элементу в среднем 26 других элементов в векторе (определяемых массивом 4D int voxt, который содержит векторные адреса).
Моя проблема в том, что когда я проверяю значения ненулевых элементов в моем векторе (phi) внутри вложенного цикла (первый cout), значения в порядке и то, что я ожидаю. Однако, когда цикл завершает прохождение всех элементов 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;
}
}