На самом деле отсутствует несколько других допустимых перестановок: 2 10 4 4
и 2 4 10 4
, и, например, 4 4 10 2
.
Относительно того, почему они отсутствуют: в документации сказано:1006 *
Возвращаемое значение true
, если функция может переставить объект как лексикографически большая перестановка.В противном случае функция возвращает false, чтобы указать, что расположение не больше предыдущего, но минимально возможное (отсортировано по возрастанию).
Таким образом, цикл while
заканчивается после 10 4 4 2
,потому что это лексикографически самая большая перестановка (та, которая «самая большая», когда вы сравниваете их слева направо, т.е. та, что в порядке убывания).После распечатки этого next_permutation не может перейти к «следующей» перестановке и переходит к «начальной» перестановке 2 4 4 10
;но это не печатается, потому что функция также вернула false.