В чем разница между iterator_category и iterator_concept? ⇐ C++
-
Гость
В чем разница между iterator_category и iterator_concept?
C++20 предлагает более мощную систему итераторов, одна из них — введение iterator_concept на основе iterator_category.
Я обнаружил, что iterator_concept и iterator_category многих итераторов в C++20 несовместимы. В качестве примера возьмем самый известный iota_view:
с использованием R = decltype(views::iota(0)); static_assert(random_access_range); используя I = ranges::iterator_t; static_assert(same_as); static_assert(same_as); Хотя R моделирует random_access_range, iterator_category его итератора представляет собой просто input_iterator_tag, что несовместимо с iterator_concept.
Почему в C++20 представлена iterator_concept? Какова его цель? Если я реализую свой собственный итератор, как мне правильно определить iterator_concept и iterator_category? Имеет ли iterator_category значение в C++20?
C++20 предлагает более мощную систему итераторов, одна из них — введение iterator_concept на основе iterator_category.
Я обнаружил, что iterator_concept и iterator_category многих итераторов в C++20 несовместимы. В качестве примера возьмем самый известный iota_view:
с использованием R = decltype(views::iota(0)); static_assert(random_access_range); используя I = ranges::iterator_t; static_assert(same_as); static_assert(same_as); Хотя R моделирует random_access_range, iterator_category его итератора представляет собой просто input_iterator_tag, что несовместимо с iterator_concept.
Почему в C++20 представлена iterator_concept? Какова его цель? Если я реализую свой собственный итератор, как мне правильно определить iterator_concept и iterator_category? Имеет ли iterator_category значение в C++20?
Мобильная версия