std::reverse()는 C++ 표준 라이브러리(STL)에 포함된 함수로, algorithm 헤더에 정의된 함수이다.
reverse() 함수는 컨테이너나 특정 범위( [first,last) ) 안에 있는 요소들의 순서를 뒤집는 역할을 하는 함수이다.
이 함수는 특정 범위 내 모든 요소에 최소 한번씩은 접근해야 하므로, 범위의 길이에 비례하는 선형 시간 복잡도 O(N)을 가진다.
swap() 함수는 두 변수의 값을 바꿔주는 함수이다. 인자로 기본 자료형을 넘겨주면 그 값을 복사해서 교체하고, 컨테이너를 넘겨주면 새로운 컨테이너를 생성하는 것이 아니라 기존 컨테이너를 교환한다.
이 함수는 내부 정보를 교체하는 행위만 하기 때문에 시간 복잡도는 상수 시간 복잡도 O(1)이다.
#include <iostream>
#include <vector>
#include <algorithm> // std::reverse를 사용하기 위해 필요
int main() {
std::vector<int> numbers = {10, 20, 30, 40, 50};
// 원본 벡터 출력
std::cout << "원본: ";
for (int num : numbers) {
std::cout << num << " ";
}
std::cout << std::endl;
// 벡터 전체의 순서를 뒤집음
// 여기서 end()는 마지막 요소의 다음 위치를 가리킨다.
std::reverse(numbers.begin(), numbers.end());
// 뒤집힌 벡터 출력
std::cout << "결과: ";
for (int num : numbers) {
std::cout << num << " ";
}
std::cout << std::endl;
}
함수의 반환 타입은 void로, 새로운 컨테이너를 생성하여 반환하는 것이 아니라, 전달된 컨테이너의 내용을 직접 수정한다.
따라서 원본 벡터인 numbers를 reverse()를 적용시킨 후에 다시 출력하면, 원본 벡터가 뒤집힌 값이 출력된다.
만약 reverse()를 사용한다면,
#include <iostream>
#include <vector>
#include <algorithm> // std::reverse를 사용하기 위해 필요
int main() {
std::vector<int> numbers = {10, 20, 30, 40, 50};
// 원본 벡터 출력
std::cout << "원본: ";
for (int num : numbers) {
std::cout << num << " ";
}
std::cout << std::endl;
// 벡터의 순서를 하나하나 뒤집는다.
for(int i = 0; i < numbers.size() / 2; i++) {
std::swap(numbers[i], numbers[numbers.size() - i - 1]);
}
// 뒤집힌 벡터 출력
std::cout << "결과: ";
for (int num : numbers) {
std::cout << num << " ";
}
std::cout << std::endl;
이와 같이 벡터의 사이즈를 이용해서, 양쪽 끝의 값을 차례로 바꿔주면 된다.