我最近了解到ForwardIterator需要 operator *
通过引用返回,这意味着迭代器
返回代理,例如 std::vector<bool>
,不能是ForwardIterator
([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
关于c++ - iterator_traits<vector<bool>::iterator>::iterator_category 不应该是 input_iterator_tag 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53738970/