내 자신의 추론은 무작위 액세스가없고 경계를 알 수있는 방법이 없다는 것입니다. 그렇다면 왜 우리는 std::advance
을 가지고 있을까요? [편집] 그리고 그것을 생각 해보니, 왜 더 std::deadvance
(더 나은 단어의 부족)입니까?양방향 반복자에 대해 연산자 +/-가없는 이유는 무엇입니까?
1
A
답변
4
당신 말이 맞습니다. operator+/-
에 대한 요구 사항은 O(1)
조작이며 양방향 반복기로는 충족시킬 수 없다는 것입니다. std::advance
에는 속도 요구 사항이 없습니다 (단, 임의 액세스 반복기 등).
부스트는 이터레이터에 대해 boost::next
및 boost::prior
구현을가집니다. 표준화에 대한 자신의 지위가 무엇인지 잘 모르겠지만 그것이 향상되면 견고합니다. 우리가 std::advance
이
2
이유는 그 반복자에서 지원하는 대부분의 effiecient 방법을 사용하여 반복자 을 향상 할 수있는 방법을 제공한다는 것입니다.
3
std::advance
의 합리적인 이유는 O (1)이 아니더라도 은 실제로이 사용하도록 의도 된 것입니다.
std::advance
을 음수 거리 (양방향 반복기의 경우)로 사용할 수 있으므로 std::deadvance
은 필요하지 않습니다.
+1
아! 그걸 전혀 몰랐어. 감사! – Samaursa
관련 문제
- 1. GWT에 isFocused()가없는 이유는 무엇입니까?
- 2. ActionScript에 "generics"가없는 이유는 무엇입니까?
- 3. String # shift()가없는 이유는 무엇입니까?
- 4. STL 반복자에 대한 오버로드 연산자 ->
- 5. 모든 양방향 반복자에 대한 공통 클래스 유형, C++
- 6. ArrayList에 size() 대신 getSize()가없는 이유는 무엇입니까?
- 7. 대리인 선언 앞에 *가없는 이유는 무엇입니까?
- 8. boost :: any에 "getter"가없는 이유는 무엇입니까?
- 9. ECMAScript 표준에 Object.setPrototypeOf (...)가없는 이유는 무엇입니까?
- 10. "heroku 번들 업데이트"가없는 이유는 무엇입니까?
- 11. 나에게 InputManager.getInstance()가없는 이유는 무엇입니까? 그리고 injectInputEvent()?
- 12. junit4에 double [] s에 대한 Assert.assertArrayEquals()가없는 이유는 무엇입니까?
- 13. .NET Framework에서 PointF (float)와 PointD (double)가없는 이유는 무엇입니까?
- 14. 내 NodeJS 경로에 "auth/twitter"가없는 이유는 무엇입니까?
- 15. iOS 스토리 보드 스케이프에 "가로로 뚜껑 달기"가없는 이유는 무엇입니까?
- 16. 접두사/접미사 ++가 있지만 접두어/접미사 + =가없는 이유는 무엇입니까?
- 17. 할당 연산자 과부하에서 참조가 반환되는 이유는 무엇입니까?
- 18. 양방향 관계에 대해 항상 역 매핑?
- 19. 내 연산자 오버로드가 컴파일되지 않는 이유는 무엇입니까?
- 20. 연산자 오버로드가 자주 사용되지 않는 이유는 무엇입니까?
- 21. 연산자 '+'대신 이름 'op_Addition'을 사용하는 이유는 무엇입니까?
- 22. 반복자에 대한 유형 검사?
- 23. BOOST_FOREACH 루프의 반복자에 액세스
- 24. 반복자에 포인터 할당
- 25. StringTokenizer 반복자에 오류가 발생했습니다.
- 26. 파이썬 반복자에 대한 호출기 작성 방법은 무엇입니까?
- 27. 세 객체에 대해 "=="연산자 사용
- 28. ASP.NET에서 양방향 (양방향) 데이터 바인딩이란 무엇입니까?
- 29. 연산자 new와 연산자 new [] 사이의 차이점은 무엇입니까?
- 30. 양방향 힙이란 무엇입니까?
양방향 반복기에 +/- 오버로드가있는 경우'someListItr + 5 '를 입력하면'someListItr'이 임의 액세스 컨테이너에 속해 있어도 가장 효율적으로 그곳으로 나아갈 수 없습니다. – Samaursa