Tak jak w temacie czy zna ktoś implementacje funkcji next_permutation()?
http://marknelson.us/2002/03/01/next-permutation/
Ban na google?
#
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 :/
Jeśli ciąg jest pusty albo jednoelementowy to masz jedną permutację. Funkcja zwraca false jeżeli ciąg staje się posortowany.
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?
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.