2013-05-17 5 views
13

내가 같은 코드를 가지고 할 (벡터에 남아 : 0 1 2 4). .base()는 여기서 무엇을합니까?C++ STL)는

+0

어쩌면 이것을 읽어야합니다. http://www.cplusplus.com/reference/iterator/reverse_iterator/base/ – JBL

답변

22

base() 순방향 대응 반복기에 역방향 반복자 변환한다. 그러나 단순함에도 불구하고이 서신은 사물처럼 사소한 것이 아닙니다.

하나 개의 원소의 역 반복기 포인트, 그것은 이전 역 참조

때문에 소자의 는 물리적 점은 소자 논리적 점은 다르다. 다음의 도면에서, i는 순방향 반복자이며 rii로 구성 역방향 반복자이다 논리적 요소 2 가리키는

       i, *i 
          | 
    -  0  1  2  3  4  - 
         |  | 
         *ri ri 

그래서 ri 경우 물리적 요소 3 가리키는. 따라서 순방향 반복자로 변환하면 결과 반복자는 예제에서 제거되는 요소 인 3을 가리 킵니다. 여기

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

int main(int argc, char *argv[]) 
{ 
    std::vector<int> v { 0, 1, 2, 3, 4 }; 
    auto i = find(begin(v), end(v), 2); 

    std::cout << *i << std::endl; // PRINTS 2 

    std::reverse_iterator<decltype(i)> ri(i); 
    std::cout << *ri << std::endl; // PRINTS 1 
} 

live example입니다 :

다음 작은 프로그램

위의 동작을 보여줍니다.

8

base()은 기본 반복기를 반환합니다.

베이스 반복기는 reverse_iterator 현재 가리키는 소자 옆의 소자를 의미한다. 즉, std::reverse_iterator(it).base() == std::next(it)입니다.

reverse_iteratorhere에 대해 자세히 알아볼 수 있습니다.

enter image description here