reverse() 함수는 <algorithm> 헤더에 포함된 함수로, 주어진 범위의 요소들을 뒤집어 순서를 바꾸는 데 사용된다.
void reverse(BidirectionalIterator first, BidirectionalIterator last);
first : 뒤집고자 하는 범위의 시작 위치를 가리키는 반복자last : 뒤집고자 하는 범위의 끝 위치 바로 다음을 가리키는 반복자reverse() 함수는 (first, last) 범위 내의 요소들을 앞뒤로 교환하며 순서를 뒤집는다. 즉, 첫 번째 요소와 마지막 요소를 교환하고, 두 번째 요소와 끝에서 두 번째 요소를 교환하는 방식으로 동작한다.
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
std::reverse(vec.begin(), vec.end());
for (int num : vec) {
std::cout << num << " ";
}
return 0;
}
출력:
5 4 3 2 1
#include <iostream>
#include <string>
#include <algorithm>
int main() {
std::string str = "hello";
std::reverse(str.begin(), str.end());
std::cout << str << std::endl;
return 0;
}
출력:
olleh
#include <iostream>
#include <list>
#include <algorithm>
int main() {
std::list<int> lst = {10, 20, 30, 40};
std::reverse(lst.begin(), lst.end());
for (int num : lst) {
std::cout << num << " ";
}
return 0;
}
출력:
40 30 20 10
reverse() 함수는 BidirectionalIterator를 지원하는 모든 컨테이너에 사용할 수 있다. 따라서 벡터, 리스트, 덱 등의 컨테이너에 적용할 수 있다.
반복자를 뒤집어 순회할 때는 rbegin()과 rend() 반복자를 사용할 수 있다.
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
// 역순 출력 (reverse 사용 없이)
for (auto it = vec.rbegin(); it != vec.rend(); ++it) {
std::cout << *it << " ";
}
return 0;
}
출력:
5 4 3 2 1
reverse() 함수는 제자리 알고리즘으로, 별도의 추가 메모리를 사용하지 않고 주어진 컨테이너 내에서 직접 순서를 바꾼다.reverse()를 호출할 때, 반드시 BidirectionalIterator를 사용하는 컨테이너에 대해서만 사용할 수 있다. 즉, 단방향 반복자(ForwardIterator)를 사용하는 컨테이너에서는 사용할 수 없다.