我最近了解到, 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
。符合上述要求吗?
答案 0 :(得分:2)
不,不是。这是vector<bool>
的大问题的一部分。
该标准自相矛盾。它说vector
的迭代器是随机访问的,但定义vector<bool>
的方式使其迭代器不满足RandomAccessIterator
的要求。
赫伯·萨特(Herb Sutter)的这篇远古论文解释了这一方面和其他缺点:http://www.gotw.ca/publications/N1185.pdf