У нас есть большой цикл, который нужно вызвать эту функцию-член повторно. Ожидается, что на каждой итерации цикла время вычисления должно быть схожим. Но в наших расчетах он становится намного медленнее, когда число итераций увеличивается. Мы обнаружили, что это вызвано этой функцией-членом. Я не совсем понимаю, почему это происходит. Может ли кто-нибудь объяснить это мне? или какие-либо предложения для такого расчета суммирования для векторов?Проблемы с многократным вызовом функции-члена, в которой реализовано суммирование векторов
Базовая реализация этой части кода:
Dataunit класс, определяющий структуру данных, в которой несколько векторов декларируются и определяются в своих функций членов.
Предсказать - указатель объекта, определенный в классе Residue, которому присвоено значение, использующее здесь. В принципе, перед вызовом функции respdef(), данные, которые Y указывает на, вычисляются, и его указатель может быть вызван вызовом dataOutput(). Также numExp и numResp являются переменными-членами Residue, которые оцениваются в конструкторе при определении.
На каждом шаге эта функция будет вызываться для формирования Yt в соответствии со значениями Y. Например, если цикл равен 10000 шагов, эта функция будет называться 10000 раз. Ожидается, что размер Yt немного изменится, что основано на какуляции набора данных Y. Но этот размер не сильно изменился.
int Residue::respdef()
{
int m,i;
Dataunit tem; //defining a objective of class Dataunit
const Dataunit* Y=predict->dataOutput(); //dataOutput() returns a pointer
//Size of Yt is set to zero and redefined using push_back and initialization
Yt.clear();
for(m=0;m!=numExp;m++)
{
Yt.push_back(tem);
//initialization is a function to define and initialize Yt.
Yt[m].initialization(Y[m].tvector.size(),numResp);
for (i=0;i!=Y[m].tvector.size();i++)
{
Yt[m].tvector[i]=Y[m].tvector[i]; //Copying Y[m].tvector to Yt[m].tvector
Yt[m].Tvector[i]=Y[m].tvector[i];//Copying Y[m].Tvector to Yt[m].Tvector
Yt[m].resp[0][i]=Y[m].resp[0][i];
Yt[m].resp[1][i]=Y[m].resp[0][i]+Y[m].resp[1][i];
Yt[m].resp[2][i]=Y[m].resp[0][i]+Y[m].resp[1][i]+Y[m].resp[2][i];
Yt[m].resp[3][i]=2*Y[m].resp[4][i];
}
}
return 1;
}
Спасибо, что помог мне здесь. Проблема не в этой части кода. Я просто понимаю, что я изменил функцию для вычисления данных Y, добавив push_back, чтобы предотвратить неполные данные. Таким образом, размер Y увеличивается в каждом цикле, что приводит к увеличению размера Yt здесь. Мне нужно изменить размер Y на каждом шагу. Спасибо
Просто удалите весь код, кроме 'return 1;', потому что это всегда результат? :) –