Guest User

Untitled

a guest
Jan 24th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.78 KB | None | 0 0
  1. template <class ForwardIterator>
  2. void rotate (ForwardIterator first, ForwardIterator middle, ForwardIterator last)
  3. {
  4. ForwardIterator next= middle;
  5.  
  6. while (first != next)
  7. {
  8. swap (*first++, *next++);
  9.  
  10. if(next == last)
  11. next= middle;
  12. else if (first==middle)
  13. middle= next;
  14. }
  15. }
  16.  
  17. T tmp = a; a = b; b = tmp;
  18.  
  19. abcdefg : store 'a' in temporary place
  20. dbcdefg : move s[3] to s[0] (where it belongs in the end, directly)
  21. dbcgefg : move s[6] to s[3]
  22. dbcgefc : move s[9%7] to s[6] (wrapping index modulo container size: 9%7 == 2)
  23. dbfgefc : move s[5] to s[2]
  24. dbfgebc : move s[1] to s[5] (another wrapping around)
  25. defgebc : move s[4] to s[1]
  26. defgabc : move 'a' from temporary place to s[4]
  27.  
  28. reverse(first, middle);
  29. reverse(middle, last);
  30. reverse(first, last);
Add Comment
Please, Sign In to add comment