Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<vector>
- using namespace std;
- template <typename T>
- void modify_k(T begin, T end, int & k) {
- int length = 0;
- T it = begin;
- while(it != end) {
- length++;
- it++;
- }
- k = (k % length + length) % length;
- }
- template <typename T>
- void rotate(T begin, T end, int k) {
- modify_k(begin, end, k);
- T middle = begin + k;
- T next = middle;
- T left, right;
- while(begin != next) {
- left = begin;
- right = next;
- begin++;
- next++;
- swap(*left, *right);
- if(next == end) {
- next = middle;
- } else {
- if(begin == middle) {
- middle = next;
- }
- }
- }
- }
- int main() {
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- vector<int> a;
- for(int i = 0; i < 10; ++i)
- a.push_back(i + 1);
- rotate(a.begin(), a.end(), 3);
- cout << "VECTOR\n";
- for(int i = 0; i < 10; ++i)
- cout << a[i] << endl;
- int b[10];
- for(int i = 0; i < 10; ++i)
- b[i] = i + 1;
- rotate(b, b + 10, -2);
- cout << "\n\nMASSIVE\n";
- for(int i = 0; i < 10; ++i)
- cout << b[i] << endl;
- return 0;
- }
Add Comment
Please, Sign In to add comment