할 일은 std::iterator<std::forward_iterator_tag, T>
에서만 상속하는 것입니다. 반복자에는 카테고리가 하나만 있습니다.
표준에는 앞으로 이터레이터 인 출력 반복기에 대한 알고리즘 (또는 다른 용도)이 없습니다. 표준에서 출력 반복기를 사용하면 단일 패스 만 있으면됩니다.
대신 표준에는 forward/bidi/randomaccess 카테고리의 변경 가능 대 불변 반복기에 대한 아이디어가 있습니다. 반복기를 통해 작성해야하며 모든 단일 알고리즘보다 더 우수한 알고리즘은 또한 반복 작성자와 동일한 반복자를 통해 읽습니다. 이것은 std::remove
, std::sort
및 기타 변경 알고리즘입니다.
반복 가능 태그와 불변 반복자의 차이점은 반복 태그에 의해 감지되지 않으며 할당 표현식이 올바른지 여부에 따라 결정됩니다. 예를 들어, 이터레이터를 std::sort
에 전달하면 그 알고리즘은 컴파일되지 않습니다. 따라서 일반적으로 입력 반복기에도 output_iterator_tag
태그가 필요하지 않습니다. OutputIterator
을 필요로하는 모든 알고리즘은 ForwardIterator
과 같이 사용할 수 있습니다. 다시 output_iterator_tag
태그를 지정할 필요가 없습니다.
표준 알고리즘의 요구 사항과 다른 요구 사항이 있다면 제안을 반복기에서 사용할 수없는 이유를 즉시 생각할 수 없습니다. 그러나 변경 가능한 표준 반복자를 감지하지는 못합니다. 예를 들어 std::deque<int>::iterator
및 int*
은 반복자 범주가 random_access_iterator_tag
이고 비공개 태그가 아니며 output_iterator_tag
과 아무 관련이 없습니다. 따라서 원하는 정보를 제공하기 위해 기존의 iterator_traits::iterator_category
을 적용하기보다는 자신의 특성 클래스를 정의하는 것이 더 나을 것입니다.
둘 모두에서 상속받습니다. –
사이드 질문으로 :이 가변적 인 반복자 태그가 표준 라이브러리로 간주되었는지는 누구에게 알 수 있습니까? 그렇다면 왜 포함되지 않았습니까? –