C++20带来了更强大的迭代器系统,其中之一就是iterator_concept
在iterator_category
.
我发现C++20 中许多迭代器的iterator_concept
and是不一致的。iterator_category
以最著名iota_view
的为例:
using R = decltype(views::iota(0));
static_assert(random_access_range<R>);
using I = ranges::iterator_t<R>;
static_assert(same_as<typename I::iterator_category, input_iterator_tag>);
static_assert(same_as<typename I::iterator_concept, random_access_iterator_tag>);
虽然是R
models random_access_range
,iterator_category
它的迭代器的the只是一个input_iterator_tag
,这和它是不一致的iterator_concept
。
为什么要引入 C++20 iterator_concept
?它的目的是什么?如果我实现自己的迭代器,我该如何正确定义iterator_concept
和定义iterator_category
?iterator_category
在 C++20 中仍然有意义吗?