ошибка передачи вектора и массива - PullRequest
1 голос
/ 17 июля 2011

Я пишу программу, основанную на многоцепочечном алгоритме Метрополиса, чтобы найти параметры минимальной энергии для данной функции.Эта программа в основном выполняется два раза:

  1. Первый многоканальный прогон прогона, который охватывает пространство параметров и останавливается при достижении заданного критерия сходимости;различные возможности параметров вокруг точек сходимости, рассчитанные на первом шаге, но только с одной цепочкой.

Для каждой цепочки я сохраняю все параметры, через которые она прошла, и соответствующую ей энергию.Каждый шаг каждой цепочки запускает (среди прочего) следующий код:

int Step(double * current_energy, vector<double> & energy){

    energy.push_back(current_energy);

    return 0;
}

Проблема в том, что для первой части программы я храню энергии в

vector< vector<double> > burn_energy;

чтобы я мог сохранить несколько серий энергий в одном месте.Во второй части я храню энергии в

vector<double> explore_energy;

, потому что мне нужно сохранить только одну серию энергии.

Проблема возникает, когда мне нужно вызвать эти шаги.Для первой части я бы назвал их так:

Step(& current_energy[j], burn_energy[j]);

, где j обозначает номер цепочки.Во второй части, поскольку существует только одна цепочка, вызов будет выглядеть примерно так:

Step(& current_energy, explore_energy);

Я не вижу, что не так с моей реализацией, но XCode выдает мне следующую ошибку в первой части:

error: no matching function for call to 'std::vector<double, std::allocator<double> >::push_back(double*&)'

Это ошибка с передачей энергии вектора или элемента массива current_energy?

Ответы [ 2 ]

2 голосов
/ 17 июля 2011
int Step(double * current_energy, vector<double> & energy)

должно быть

int Step(double current_energy, vector<double> & energy)

Edit:

После комментария ФП я предлагаю это;

int Step(double& current_energy, vector<double> & energy)
             ^^^^   

в этом случае вы можете изменить текущую энергию без какого-либо синтаксиса указателя. Это называется ссылкой.

1 голос
/ 17 июля 2011

energy - это вектор double с, но вы пытаетесь вставить на него double*.Не делай этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...