이 튜토리얼에서는 C++에서 STL(표준 템플릿 라이브러리)을 사용하여 벡터(vector)를 뒤집는 방법을 알아봅니다.
C++ STL은 컨테이너의 요소 순서를 손쉽게 변경할 수 있는 다양한 알고리즘 함수를 제공하는데, 그중 reverse() 함수를 사용하면 주어진 벡터를 단 한 줄의 코드로 뒤집을 수 있습니다.
reverse() 함수란?
reverse() 함수는 <algorithm> 헤더에 정의되어 있으며, 지정한 범위 내의 요소들을 첫 번째 요소와 마지막 요소부터 서로 교환하며 순서를 반대로 뒤집습니다. 이 함수는 두 개의 인자를 받습니다.
- first: 뒤집을 범위의 시작을 가리키는 반복자(iterator)
- last: 뒤집을 범위의 끝(마지막 요소 다음)을 가리키는 반복자
시간 복잡도는 벡터의 크기에 비례하여 O(n)입니다.
예제 코드
#include <bits/stdc++.h>
using namespace std;
int main() {
// 벡터 선언 및 초기화
vector<int> a = { 1, 45, 54, 71, 76, 12 };
cout << "Vector: ";
for (int i = 0; i < a.size(); i++)
cout << a[i] << " ";
cout << endl;
// reverse() 함수로 벡터 뒤집기
reverse(a.begin(), a.end());
cout << "Reversed Vector: ";
for (int i = 0; i < a.size(); i++)
cout << a[i] << " ";
cout << endl;
return 0;
}실행 결과
Vector: 1 45 54 71 76 12 Reversed Vector: 12 76 71 54 45 1
코드 설명
위 예제에서는 먼저 정수형 벡터 a를 초기화한 후, 원래 벡터의 내용을 출력합니다. 그다음 reverse(a.begin(), a.end())를 호출하여 벡터의 처음부터 끝까지 전체 범위를 뒤집고, 결과를 다시 출력합니다.
a.begin()은 벡터의 첫 번째 요소를 가리키고, a.end()는 마지막 요소의 다음 위치를 가리키므로, 이 두 반복자 사이의 모든 요소가 역순으로 배치됩니다.
참고: rbegin()과 rend()를 활용한 방법
원본 벡터를 변경하지 않고 역순으로 접근하고 싶다면 rbegin()과 rend() 반복자를 사용할 수도 있습니다. 또한 C++11 이상에서는 범위 기반 for문(range-based for loop)을 사용하면 코드를 더 간결하게 작성할 수 있습니다.
for (int x : a)
cout << x << " ";이처럼 STL의 reverse() 함수를 활용하면 직접 반복문으로 요소를 교환하는 번거로운 작업 없이도 벡터를 간단하고 효율적으로 뒤집을 수 있습니다.