iterator_traits<vector<bool>::iterator>::iterator_category 不应该是 input_iterator_tag 吗?
Shouldn't iterator_traits<vector<bool>::iterator>::iterator_category be input_iterator_tag?
我最近了解到 ForwardIterators 需要 operator *
到 return 通过引用,这意味着迭代器
return 代理,例如 std::vector<bool>
,不能是 ForwardIterators
([forward.iterators]).
但是,我在不同的编译器中测试了 std::iterator_traits<std::vector<bool>::iterator>::iterator_category
(G++, Clang, MSVC) 和它
总是 std::random_access_iterator_tag
。符合上述要求吗?
不,不是。这是 vector<bool>
.
的大问题的一部分
标准自相矛盾。它说 vector
的迭代器是随机访问的,但定义 vector<bool>
的方式使其迭代器不满足 RandomAccessIterator
.
的要求
Herb Sutter 的这篇古老论文解释了这个和其他缺点:http://www.gotw.ca/publications/N1185.pdf
我最近了解到 ForwardIterators 需要 operator *
到 return 通过引用,这意味着迭代器
return 代理,例如 std::vector<bool>
,不能是 ForwardIterators
([forward.iterators]).
但是,我在不同的编译器中测试了 std::iterator_traits<std::vector<bool>::iterator>::iterator_category
(G++, Clang, MSVC) 和它
总是 std::random_access_iterator_tag
。符合上述要求吗?
不,不是。这是 vector<bool>
.
标准自相矛盾。它说 vector
的迭代器是随机访问的,但定义 vector<bool>
的方式使其迭代器不满足 RandomAccessIterator
.
Herb Sutter 的这篇古老论文解释了这个和其他缺点:http://www.gotw.ca/publications/N1185.pdf