Advertisement
Guest User

Untitled

a guest
Nov 15th, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.57 KB | None | 0 0
  1. template <typename T>
  2. bool
  3. next_permutation(T first, T last)
  4. {
  5. if (first == last) return false;
  6.  
  7. auto x_item = last;
  8.  
  9. for (T i = first; i != (last - 1); ++i)
  10. if (*i < *(i + 1)) x_item = i;
  11.  
  12. if (x_item == last) return false;
  13.  
  14. auto y_item = last;
  15.  
  16. for (T i = first; i != last; ++i)
  17. if (*x_item < *i) y_item = i;
  18.  
  19. if (y_item == last) return false;
  20.  
  21. std::iter_swap(x_item, y_item);
  22.  
  23. ++x_item;
  24.  
  25. while ((x_item != last) && (x_item != --last))
  26. std::iter_swap(x_item++, last);
  27.  
  28. return true;
  29. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement