base()

김민수·2025년 1월 8일

C++

목록 보기
44/68

base() 함수는 역방향 반복자(reverse_iterator)가 실제로 가리키는 순방향 반복자를 반환한다.
반환된 순방향 반복자는 역방향 반복자가 가리키는 현재 요소의 다음 요소를 가리킨다.
base() 함수는 역방향 반복자에서 순방향 연산이 필요할 때 유용하게 사용된다.


reverse_iterator.base();
  • 반환값
    순방향 반복자: 역방향 반복자에 대응되는 실제 순방향 반복자


1. 기본 예제 (벡터에서 역방향 반복자를 순방향 반복자로 변환)

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec = {10, 20, 30, 40, 50};

    // 역방향 반복자 선언 (끝에서 시작)
    std::vector<int>::reverse_iterator rit = vec.rbegin();

    // 역방향 반복자를 순방향 반복자로 변환
    auto it = rit.base();

    std::cout << "Element at base of reverse_iterator: " << *it << "\n"; // 출력: 20

    return 0;
}
  • ritrbegin()을 통해 마지막 요소(50)를 가리키는 역방향 반복자다.
  • rit.base()50 다음의 순방향 반복자(즉, 20의 위치)를 반환한다.
  • 역방향 반복자는 실제로 다음 요소를 가리키므로, base()를 사용하면 다음 순방향 요소에 대한 반복자가 반환된다.


2. 문자열에서 역방향 반복자를 순방향 반복자로 변환

#include <iostream>
#include <string>

int main() {
    std::string str = "Hello";

    // 역방향 반복자 선언
    std::string::reverse_iterator rit = str.rbegin();

    // 역방향 반복자를 순방향 반복자로 변환
    auto it = rit.base();

    std::cout << "Element at base of reverse_iterator: " << *it << "\n"; // 출력: o

    return 0;
}
  • rit.base()가 가리키는 위치는 역방향 반복자가 가리키는 위치보다 한 칸 앞의 순방향 위치다. 따라서 *it을 직접 참조하면 그 앞의 값이 출력된다.


3. 역방향 반복자를 사용하여 문자열 뒤집기

#include <iostream>
#include <string>
#include <algorithm>

int main() {
    std::string str = "Hello, World!";
    
    // 역방향 반복자를 사용하여 문자열 뒤집기
    std::string reversedStr(str.rbegin(), str.rend());

    std::cout << "Reversed String: " << reversedStr << "\n"; // 출력: !dlroW ,olleH

    return 0;
}


4. 역방향 반복자를 사용하여 특정 구간 뒤집기

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> vec = {10, 20, 30, 40, 50};

    // 역방향 반복자를 사용하여 [20, 40] 구간 뒤집기
    std::reverse(vec.rbegin() + 1, vec.rend() - 1);

    // 결과 출력
    for (int num : vec) {
        std::cout << num << " ";
    }
    // 출력: 10 40 30 20 50

    return 0;
}
profile
안녕하세요

0개의 댓글