내가 같은 코드를 가지고 할 (벡터에 남아 : 0 1 2 4). .base()는 여기서 무엇을합니까?C++ STL)는
13
A
답변
22
base()
순방향 대응 반복기에 역방향 반복자 변환한다. 그러나 단순함에도 불구하고이 서신은 사물처럼 사소한 것이 아닙니다.
하나 개의 원소의 역 반복기 포인트, 그것은 이전 역 참조
때문에 소자의 는 물리적 점은 소자 논리적 점은 다르다. 다음의 도면에서,i
는 순방향 반복자이며
ri
는
i
로 구성 역방향 반복자이다 논리적 요소
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_iterator
here에 대해 자세히 알아볼 수 있습니다.
어쩌면 이것을 읽어야합니다. http://www.cplusplus.com/reference/iterator/reverse_iterator/base/ – JBL