[C++] 값 회전 std::rotate()

bolee·2022년 11월 26일
0

C++

목록 보기
1/16
post-thumbnail

std::rotate()

#include <algorithm>

template <class ForwardIterator>  ForwardIterator rotate (ForwardIterator first, ForwardIterator middle, ForwardIterator last);

rotate 함수를 이용해 값들을 회전시키는 듯 지정된 횟수만큼오른쪽으로 회전시키거나, 왼쪽으로 회전할 수 있다.

회전 시킬 때마다 원소들 간에 swap을 해주는 것이기 때문에 컨테이너에 원소가 많이 존재하거나 하는 경우에는 매우 비효율적이며 특수한 경우가 아닌 경우 사용을 지양해야 한다.

Parameters

parametersdescription
first회전할 범위의 시작 iterator
middle회전하여 첫번째 요소가 될 범위 내 iterator
last회전할 범위의 마지막 iterator
last가 가리키는 원소는 범위에 포함되지 않는다.

Return value

이전에 first가 가리킨 값을 가리키는 iterator


Example Code

#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;
}

Output

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

참고 자료

0개의 댓글