我最近了解到,_ForwardIterator_s要求operator *通过引用返回,这意味着返回代理的迭代器(如std::vector<bool> )不能是_ForwardIterator_s ([forward.iterators])。
但是,我在不同的编译器中测试了std::iterator_traits<std::vector<bool>::iterator>::iterator_category (G++、嘎吱声、MSVC),并且始终是std::random_access_iterator_tag。这是否符合上述规定?
发布于 2018-12-12 08:53:11
不,它不是。这是vector<bool>大问题的一部分。
这个标准自相矛盾。它说vector的迭代器是随机访问,但是定义vector<bool>的方式是它的迭代器不能满足RandomAccessIterator的要求。
赫伯·萨特的这篇古文解释了这一点和其他缺点:http://www.gotw.ca/publications/N1185.pdf
https://stackoverflow.com/questions/53738970
复制相似问题