Интеллектуальный способ переписать функцию Matlab в C ++ - PullRequest
0 голосов
/ 09 октября 2018

Я недавно конвертировал код Matlab в C ++ из-за того, что Matlab не смог обработать мой желаемый размер проблемы.Тем не менее, я столкнулся с проблемой, касающейся Matlab colon operator.

У меня есть массив ue размером nx+2*m, где m и nx - целые числа.u имеет размер nx.Для того, что мне нужно сделать, я должен изменить массив ue следующим образом

ue = zeros(nx+2*m,1)
u = zeros(nx,1)
ue((m+1):(nx+m)) = u(1:nx) 

Извините, если это тривиальный вопрос, однако я новичок в C ++ и хотел бы услышать мнения о том, какэффективно сделать это.

РЕДАКТИРОВАТЬ: Для тех людей, которые не знают Matlab.Оператор двоеточия действует как цикл for.

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Ваш код MATLAB, дословно переведенный на C ++:

std::vector<double> ue(nx+2*m, 0);
std::vector<double> u(nx, 0);
for (size_t ii = 0; ii < nx; ++ii) {
   ue[m + ii] = u[ii];
}

Вы можете использовать std::copy, чтобы заменить цикл на что-то более читаемое:

std::copy(u.begin(), u.end(), ue.begin()+m);
0 голосов
/ 09 октября 2018

Если вы можете определить, где вы хотите, чтобы ваш цикл начинался и заканчивался, это будет тривиальное исправление.Если вы не можете определить его (то есть, это лямбда-функция), тогда не используйте цикл for, но используйте правильную лямбду (при условии, что у вас есть C ++ 14 +)

Также, если (m + 1)типа (N + m) вы можете заглянуть в BOOST_FOREACH для более читабельного кода.

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