Ваш вектор возврата - это именно то, что вы кодировали. Цикл for будет выполняться ровно 3 раза - длина вектора очереди, поэтому вы получаете три 5 с вместо семи. Изменение len
внутри цикла не поможет, поскольку диапазон для переменной i
определяется до запуска цикла for и не может быть изменен во время выполнения. Другими словами, после запуска цикла for он забывает, что такое len
, он просто помнит, что i
нужно изменить с 1 на 3.
Всегда ли начальная x
равна length(que)+1
?
Какой вектор вы ожидаете, скажем, x = 5?
2 3 4 0 5 5 5 5 5 5
? или 2 3 4 5 5 5 5 5 5
?
или 2 3 4 5 5 5 5 5 5 5
? (на самом деле не зависит от x)
В первом случае лучшее решение для matlab-ish было бы от @gnovice:
que = [2 3 4];
x = 5;
y = 10;
val = 5;
que(x:y)=val;
Во втором случае другое решение от @gnovice:
que = [2 3 4];
x = 5;
y = 10;
val = 5;
que = [que, val.*ones(1,y-x+1)];
или
que = [que, repmat(val, 1, y-x+1)];
В третьем случае это решение @woodchips:
que = [que, repmat(val, 1, y - length(que))];
В вашей ситуации использование цикла (для или во время) действительно плохо, потому что в каждом цикле вы увеличиваете размер вектора очереди с перераспределением памяти.