РЕДАКТИРОВАТЬ: Извините, это просто моя ошибка в инициализации в коде ниже.
const int kDigits = 7;
std::vector<int> number(kDigits);
for (int i = kDigits - 1; i >= 0; i--) {
number[i] = i + 1;
}
Вектор number
инициализируется как 7, 6, 5, 4, 3, 2, 1
.
Моя цель - генерировать перестановки в порядке убывания:
7654321
7654312
7654231
7654213
7654132
Этот код работает :
do {
...
}
while (std::prev_permutation(number.rbegin(), number.rend()));
Однако я не понимаю, почему. Так как 7654321
является самой большой лексикографической перестановкой, не должен ли while (std::prev_permutation(number.begin(), number.end()));
(без обратных итераторов) генерировать ее правильно, поскольку она будет генерировать предыдущую перестановку в порядке? Однако, это возвращает false с первой попытки, даже если это должно генерировать «более низкую перестановку».
Кроме того, в приведенном выше коде, поскольку он использует обратные итераторы, мой разум интерпретирует его как нахождение предыдущей перестановки 1234567
(7654321
в обратном направлении), которая, как мне кажется, не должна иметь ничего.
Большое спасибо за помощь заранее! Я с нетерпением жду, чтобы выяснить, что я неправильно истолковал / чего мне не хватает.