Czy zna ktoś implementacje funkcji next_permutation?

0

Tak jak w temacie czy zna ktoś implementacje funkcji next_permutation()?

0
#
bool next_permutation(BidirectionalIterator first,
#
                      BidirectionalIterator last) {
#
    if (first == last) return false;
#
    BidirectionalIterator i = first;
#
    ++i;
#
    if (i == last) return false;
#
    i = last;
#
    --i;
#
 
#
    for(;;) {
#
        BidirectionalIterator ii = i--;
#
        if (*i <*ii) {
#
            BidirectionalIterator j = last;
#
            while (!(*i <*--j));
#
            iter_swap(i, j);
#
            reverse(ii, last);
#
            return true;
#
        }
#
        if (i == first) {
#
            reverse(first, last);
#
            return false;
#
        }
#
    }
#
}

Nie bardzo potrafie skumać tych pierwszych warunków...
if (first == last) return false; //tzn. jeśli element pierwszy jest ostatnim to brak permutacji?
if (i == last) return false; // tego warunku nie czaje :/

0

Jeśli ciąg jest pusty albo jednoelementowy to masz jedną permutację. Funkcja zwraca false jeżeli ciąg staje się posortowany.

0

Nic nie rozumiem z tego co napisałeś.

czyli pierwszy warunek if sprawdza czy element jest pusty, ponieważ last jest elementem który wyskakuję poza tablicę, czyli jest ostatnim+1 elementem tablicy, dobrze zrozumiałem?

0

Pierwszy if zachodzi gdy kolekcja jest pusta, drugi gdy jednoelementowa. Nietrudno zgadnąć, że w obu przypadkach mamy posortowaną kolekcję, a więc funkcja ma zwrócić false.

1 użytkowników online, w tym zalogowanych: 0, gości: 1