2012-01-11 4 views

답변

4

당신 말이 맞습니다. operator+/-에 대한 요구 사항은 O(1) 조작이며 양방향 반복기로는 충족시킬 수 없다는 것입니다. std::advance에는 속도 요구 사항이 없습니다 (단, 임의 액세스 반복기 등).

부스트는 이터레이터에 대해 boost::nextboost::prior 구현을가집니다. 표준화에 대한 자신의 지위가 무엇인지 잘 모르겠지만 그것이 향상되면 견고합니다. 우리가 std::advance

2

이유는 그 반복자에서 지원하는 대부분의 effiecient 방법을 사용하여 반복자 을 향상 할 수있는 방법을 제공한다는 것입니다.

+0

양방향 반복기에 +/- 오버로드가있는 경우'someListItr + 5 '를 입력하면'someListItr'이 임의 액세스 컨테이너에 속해 있어도 가장 효율적으로 그곳으로 나아갈 수 없습니다. – Samaursa

3

std::advance의 합리적인 이유는 O (1)이 아니더라도 은 실제로이 사용하도록 의도 된 것입니다.

std::advance을 음수 거리 (양방향 반복기의 경우)로 사용할 수 있으므로 std::deadvance은 필요하지 않습니다.

+1

아! 그걸 전혀 몰랐어. 감사! – Samaursa

관련 문제