reverse()

김민수·2025년 1월 10일

C++

목록 보기
52/68

reverse() 함수는 <algorithm> 헤더에 포함된 함수로, 주어진 범위의 요소들을 뒤집어 순서를 바꾸는 데 사용된다.


1. 정의

void reverse(BidirectionalIterator first, BidirectionalIterator last);
  • first : 뒤집고자 하는 범위의 시작 위치를 가리키는 반복자
  • last : 뒤집고자 하는 범위의 위치 바로 다음을 가리키는 반복자


2. 동작 원리

reverse() 함수는 (first, last) 범위 내의 요소들을 앞뒤로 교환하며 순서를 뒤집는다. 즉, 첫 번째 요소와 마지막 요소를 교환하고, 두 번째 요소와 끝에서 두 번째 요소를 교환하는 방식으로 동작한다.



3. 사용 예시

벡터의 요소 뒤집기

#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를 지원하는 모든 컨테이너에 사용할 수 있다. 따라서 벡터, 리스트, 덱 등의 컨테이너에 적용할 수 있다.


reverse와 rbegin, rend 사용

반복자를 뒤집어 순회할 때는 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


4. 주의사항

  • reverse() 함수는 제자리 알고리즘으로, 별도의 추가 메모리를 사용하지 않고 주어진 컨테이너 내에서 직접 순서를 바꾼다.
  • reverse()를 호출할 때, 반드시 BidirectionalIterator를 사용하는 컨테이너에 대해서만 사용할 수 있다. 즉, 단방향 반복자(ForwardIterator)를 사용하는 컨테이너에서는 사용할 수 없다.
profile
안녕하세요

0개의 댓글