iterator_traits <vector <bool> :: iterator> :: iterator_category不应该作为input_iterator_tag吗?

时间:2018-12-12 08:34:06

标签: c++ iterator typetraits stl-algorithm

我最近了解到, ForwardIterator 需要operator *才能通过引用返回,这意味着迭代器 返回代理,例如std::vector<bool>,不能是 ForwardIterator [forward.iterators])。

但是,我在不同的编译器中测试了std::iterator_traits<std::vector<bool>::iterator>::iterator_categoryG++ClangMSVC)及其 一直是std::random_access_iterator_tag。符合上述要求吗?

1 个答案:

答案 0 :(得分:2)

不,不是。这是vector<bool>的大问题的一部分。

该标准自相矛盾。它说vector的迭代器是随机访问的,但定义vector<bool>的方式使其迭代器不满足RandomAccessIterator的要求。

赫伯·萨特(Herb Sutter)的这篇远古论文解释了这一方面和其他缺点:http://www.gotw.ca/publications/N1185.pdf