std::rotate()
#include <algorithm>
template <class ForwardIterator> ForwardIterator rotate (ForwardIterator first, ForwardIterator middle, ForwardIterator last);
rotate 함수를 이용해 값들을 회전시키는 듯 지정된 횟수만큼오른쪽으로 회전시키거나, 왼쪽으로 회전할 수 있다.
회전 시킬 때마다 원소들 간에 swap을 해주는 것이기 때문에 컨테이너에 원소가 많이 존재하거나 하는 경우에는 매우 비효율적이며 특수한 경우가 아닌 경우 사용을 지양해야 한다.
parameters | description |
---|---|
first | 회전할 범위의 시작 iterator |
middle | 회전하여 첫번째 요소가 될 범위 내 iterator |
last | 회전할 범위의 마지막 iteratorlast 가 가리키는 원소는 범위에 포함되지 않는다. |
이전에 first가 가리킨 값을 가리키는 iterator
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<int> v = { 10, 40, 50, 30, 20 };
cout << "vector: ";
for (int i : v) cout << i << " ";
cout << "\n\n";
// 왼쪽 1칸 이동: 40 50 30 20 10
rotate(v.begin(), v.begin() + 1, v.end());
cout << "rotate left 1: ";
for (int i : v) cout << i << " ";
cout << "\n\n" << endl;
// 왼쪽 2칸 이동: 30 20 10 40 50
rotate(v.begin(), v.begin() + 2, v.end());
cout << "rotate left 2: ";
for (int i : v) cout << i << " ";
cout << "\n\n";
// 오른쪽 3칸 이동: 10 40 50 30 20
rotate(v.begin(), v.end() - 3, v.end());
cout << "rotate right 3: ";
for (int i : v) cout << i << " ";
cout << "\n\n";
// 오른쪽 1칸 이동: 20 10 40 50 30
rotate(v.begin(), v.end() - 1 , v.end());
cout << "rotate right 1: ";
for (int i : v) cout << i << " ";
cout << "\n";
return 0;
}
vector: 10 40 50 30 20
rotate left 1: 40 50 30 20 10
rotate left 2: 30 20 10 40 50
rotate right 3: 10 40 50 30 20
rotate right 1: 20 10 40 50 30