[Basic C++] #66_rotate, 배열 회전
C++에서 제공하는 rotate() 함수에 대해 알아보겠습니다.
Overview
- 개념
- 코드 예제
#0. 개념
1. 배열 회전
- C++에서 제공하는 rotate() 함수는 지정된 범위 내에서 항목들의 순서를 변경합니다.
2. 헤더
#include <algorithm>
3. Syntax
template <class ForwardIterator>
void rotate (ForwardIterator first, ForwardIterator middle, ForwardIterator last);
Details
- rotate() 함수는 총 세 가지 인자를 전달받습니다. first, middle, last.
- first는 범위의 첫 번째 항목을 가리키는 반복자입니다.
- middle은 범위의 첫 번째 그룹의 마지막 요소를 가리키는 반복자입니다.
- last는 범위의 마지막 요소를 가리키는 반복자입니다.
- rotate() 함수는 범위 [first, last)를 [middle, last)와 [first, middle)로 분할합니다. 그리고 이 두 그룹의 순서를 뒤바꿉니다.
#1. 코드 예제
1. 예제-1
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<int>v = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
rotate(begin(v), begin(v) + 4, end(v));
for (auto val : v)
{
cout << val << endl;
}
return 0;
}
Details
- rotate() 함수를 활용해 vector 컨테이너에 저장된 항목들의 순서를 바꾸는 혹은 회전시키는 코드 예제입니다.
- first는 begin(v)로 첫 번째 항목을 가리키는 반복자, middle은 begin(v)+4로 4번 인덱스의 항목을 가리키는 반복자, 마지막으로 end(v)는 마지막 항목을 가리키는 반복자입니다.
- 먼저, [middle, end) 그룹은 { 5, 6, 7, 8, 9 } 이며, middle이 가리키는 항목부터 포함해 end 직전의 항목까지를 두 번째 그룹으로 봅니다.
- 다음으로, [first, middle) 그룹은 { 1, 2, 3, 4 }이며, first가 가리키는 항목을 포함해 middle 직전의 항목까지를 첫 번째 그룹으로 봅니다.
- 주의할 점은 첫 번째 그룹과 두 번째 그룹 모두 동일하게 범위의 마지막 항목을 가리키는 반복자 직전의 항목들만 포함된다는 것입니다!
2. 예제-2
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<int>v = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
rotate(begin(v), end(v) - 1, end(v));
for (auto val : v)
{
cout << val << endl;
}
return 0;
}
Details
- rotate() 함수를 통해 vector 컨테이너에 저장된 항목들의 순서를 바꾸는 혹은 회전시키는 또 하나의 예제 코드입니다.
- 위 예제 코드는 first, middle, last가 비교적 한눈에 들어오지 않습니다.
- 첫 번째 그룹은 [begin(v), end(v)-1)로 첫 번재 항목부터 마지막 항목 직전의 항목들을 포함합니다.
- 두 번째 그룹은 [end(v)-1, end(v))로 마지막 항목 부터 마지막 항목까지, 즉 하나의 항목만 포함합니다.
- 결과적으로, 해당 코드는 vector 컨테이너를 오른쪽으로 한 칸씩 회전시키고 있습니다!
'언어 > Basic C++' 카테고리의 다른 글
[Basic C++] #68_deque (0) | 2023.06.16 |
---|---|
[Basic C++] #67_queue (0) | 2023.06.16 |
[Basic C++] #65_getline() (0) | 2023.04.03 |
[Basic C++] #64_stack (0) | 2023.04.03 |
[Basic C++] #63_string (0) | 2023.04.03 |