std :: advance와 std :: next의 차이점은 무엇입니까?
음수를 넘어서는 더 많은 것이 있습니까?
- 인수를 수정
- 아무것도 반환하지 않는다
- 입력 반복자 이상에서 작동합니다 (또는 음의 거리가 주어지면 양방향 반복기).
- 인수를 수정하지 않고 그대로 둡니다.
- 지정된 양만큼 앞선 인수의 복사본을 반환합니다.
- 순방향 반복자 이상에서 작동합니다 (또는 음의 거리가 제공되는 경우 양방향 반복기))
아마도 가장 큰 실질적인 차이점은 std::next()
C ++ 11에서만 사용할 수 있다는 것 입니다.
std::next()
기본적으로 하나씩 진행되지만 std::advance()
거리가 필요합니다.
그리고 반환 값이 있습니다.
std::advance()
: (없음) (전달 된 반복자가 수정 됨)std::next()
: n 번째 후속 작업입니다.
std::next()
처럼 음수를 취하며이 std::advance
경우 반복기가 양방향이어야합니다. std::prev()
의도가 특히 뒤로 이동하려는 경우 더 읽기 쉽습니다.
std :: advance
advance () 함수는 인수로 전달 된 반복기의 위치를 증가시킵니다. 따라서이 함수를 사용하면 반복기가 둘 이상의 요소를 앞으로 (또는 뒤로) 이동할 수 있습니다.
#include <iterator>
void advance (InputIterator& pos, Dist n)
- 입력 반복기 pos가 n 요소를 앞으로 ( 또는 뒤로 ) 이동할 수 있도록 합니다.
- 양방향 및 임의 액세스 반복기의 경우 n이 음수이면 뒤로 이동할 수 있습니다.
- Dist는 템플릿 유형입니다. 일반적으로 <, ++,-및 0과의 비교와 같은 연산이 호출되므로 정수 유형이어야합니다.
- advance ()는 시퀀스의 end ()를 교차하는지 여부를 확인하지 않습니다 (일반적으로 반복기가 작동하는 컨테이너를 모르기 때문에 확인할 수 없습니다). 따라서이 함수를 호출하면 시퀀스의 끝에 대해 ++ 연산자를 호출하는 것이 정의되지 않았기 때문에 정의되지 않은 동작이 발생할 수 있습니다.
std :: next (및 std::prev
C ++ 11의 새로운 기능)
#include <iterator>
ForwardIterator next (ForwardIterator pos)
ForwardIterator next (ForwardIterator pos, Dist n)
- 앞으로 1 또는 n 위치로 이동하면 앞으로 반복기 pos가 가질 위치를 나타냅니다.
- 양방향 및 랜덤 액세스 반복기의 경우 n은 이전 버전을 생성하기 위해 음수 일 수 있습니다.
- Dist는 std :: iterator_traits :: difference_type 유형입니다.
- 내부 임시 개체에 대해 advance (pos, n)을 호출합니다.
- next ()는 시퀀스의 end ()를 통과하는지 여부를 확인하지 않습니다. 따라서 결과가 유효한지 확인하는 것은 호출자에게 달려 있습니다.
인용하다 The C++ Standard Library Second Edition
std::next
복사본 을 반환 std::advance
하고 인수를 수정 한다는 점을 제외하면 거의 동일 합니다. 표준은 다음 std::next
과 같이 작동 해야 합니다 std::advance
.
24.4.4 반복자 연산 [iterator.operations]
template <class InputIterator, class Distance> void advance(InputIterator& i [remark: reference], Distance n);
2. 요구 사항 : n은 양방향 및 랜덤 액세스 반복자에 대해서만 음수 여야합니다.
3. 효과 : 반복기 참조 i를 n만큼 증가시킵니다 (또는 음수 n에 대해 감소).
[...]template <class ForwardIterator> ForwardIterator next(ForwardIterator x, [remark: copy] typename std::iterator_traits<ForwardIterator>::difference_type n = 1);
6. 효과 : 동등
advance(x, n); return x;
참고 모두 반복기는 입력 반복자 경우 실제로 음의 값을 지원한다. 또한 std::next
반복기가 ForwardIterator의 조건을 충족 std::advance
해야하지만 입력 반복자 만 필요합니다 (음의 거리를 사용하지 않는 경우).
ReferenceURL : https://stackoverflow.com/questions/15017065/whats-the-difference-between-stdadvance-and-stdnext
'IT Share you' 카테고리의 다른 글
Visual Studio 2010 용 간단한 HTML 프로젝트 유형 (0) | 2020.12.15 |
---|---|
연결할 소스 외부 참조를 찾을 수 없습니다. (0) | 2020.12.15 |
Automapper-다중 객체 소스 및 하나의 대상 (0) | 2020.12.15 |
Subversion을위한 더 나은 병합 도구 (0) | 2020.12.15 |
C ++ 클래스의 멤버는 어떻게 주문해야합니까? (0) | 2020.12.15 |