РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
416 of 815 menu

Функция next_permutation

Функция next_permutation из заголовочного файла algorithm переставляет элементы диапазона в следующую перестановку в лексикографическом порядке. Если такая перестановка существует, функция изменяет диапазон и возвращает true. Если текущая перестановка является последней возможной, функция возвращает false и переставляет элементы в первую (наименьшую) перестановку. В первый и второй параметры мы передаем итераторы начала и конца диапазона, а в третий необязательный параметр можно передать функцию сравнения.

Синтаксис

next_permutation(first, last) next_permutation(first, last, comp)

Пример

Давайте получим следующую перестановку для вектора 1, 2, 3:

#include <iostream> #include <algorithm> #include <vector> using namespace std; int main() { vector<int> res = {1, 2, 3}; next_permutation(res.begin(), res.end()); for (int el : res) { cout << el << " "; } cout << endl; return 0; }

Результат выполнения кода:

1 3 2

Пример

Давайте переберём все возможные перестановки вектора 1, 2, 3 в цикле:

#include <iostream> #include <algorithm> #include <vector> using namespace std; int main() { vector<int> res = {1, 2, 3}; do { for (int el : res) { cout << el << " "; } cout << endl; } while (next_permutation(res.begin(), res.end())); return 0; }

Результат выполнения кода:

1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1

Пример

Давайте проверим, что произойдёт, если вызвать функцию для последней перестановки вектора 3, 2, 1:

#include <iostream> #include <algorithm> #include <vector> using namespace std; int main() { vector<int> res = {3, 2, 1}; bool hasNext = next_permutation(res.begin(), res.end()); cout << boolalpha << hasNext << endl; for (int el : res) { cout << el << " "; } cout << endl; return 0; }

Результат выполнения кода:

false 1 2 3

Смотрите также

  • функция prev_permutation,
    которая получает предыдущую перестановку
  • функция sort,
    которая сортирует элементы диапазона
  • функция reverse,
    которая меняет порядок элементов на обратный
  • функция rotate,
    которая выполняет циклический сдвиг элементов
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить