C++ Rotate 함수 사용법

Rotate : 위치를 이동 시킨다.

First 에서 Last 구간을 Middle을 기준으로 회전시킨다.

  • n칸씩 밀거나, n칸씩 당겨와야 할때 유용하게 쓰인다.

사실 잘 와 닿지 않는다.

내가 처음에 설명글을 보았을떄 느낀점이다.

Rotate left the elements in range
Rotates the order of the elements in the range [first,last), in such a way that the element pointed by middle becomes the new first element.

좀더 편하게 재해석 해보자

  • FirstLast로 옮긴다.
  • First에서 Middle사이의 범위 만큼!
    • 이때 (First , Middle] 이다. Middle은 포함되지 않는다.

예시 1

  • ABCD 문자열이 있다고 해보자.
  • 좌측으로 한칸씩 밀어 A 를 맨 뒤로 보내고 싶다. BCDA
  • rotate(begin, begin + 1, end)
    • begin ~ begin + 1 , A
    • end 맨뒤 으로 보낸다!

예시 2

  • ABCD 문자열이 있다고 해보자.
  • 우측으로 한칸씩 밀어 D 를 맨 앞으로 보내고 싶다. DABC
  • rotate(rbegin, rbegin + 1, rend)
    • rbegin ~ rbegin + 1 , D
    • rend 맨앞 으로 보낸다!

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

void Left_rotate(string str) {
    cout << "[Left rotate]\n";
    cout << "Before : " << str << "\n";

    rotate(str.begin(), str.begin() + 2, str.end());
    cout << "Rotated : " << str << "\n";
}


void Right_rotate(string str) {
    cout << "[Right rotate]\n";
    cout << "Before : " << str << "\n";

    rotate(str.rbegin(), str.rbegin() + 2, str.rend());
    cout << "Rotated : " << str << "\n";
}

int main()
{
    string str = "Jung Yoon Sung";


    Left_rotate(str);
    cout << "\n";
    Right_rotate(str);


    return 0;
}

결과

1
2
3
4
5
6
7
[Left rotate]
Before : Jung Yoon Sung
Rotated : ng Yoon SungJu

[Right rotate]
Before : Jung Yoon Sung
Rotated : ngJung Yoon Su

Reference

http://www.cplusplus.com/reference/algorithm/rotate/?kw=rotate