[英]Requirements for forward iterator iterator_traits::reference
我试图弄清楚对forward_iterators的reference
类型有什么要求。 在明显的情况下,您将拥有value_type = T;
和reference = T&;
。 阅读有关正向迭代器要求的cppreference页面 ,我看到了
Expression Return Equivalent expression
*i++ reference value_type& temp=*i; ++i; return temp;
std::vector<bool>
显示“等效表达式”并不总是有效,因为它返回了代理对象:
std::vector<bool> v(10);
auto i = v.begin();
std::vector<bool>::iterator::value_type& temp = *i; // error
// can't bind bool& to std::_Bit_reference
我看到的标准中没有提到等效表达式。 但是,代理对象允许分配,这可能是一致性的关键。
除了尽力确定需求之外,我的具体问题还涉及到知道是否具有value_type
== reference
(既不是引用也不支持赋值)将与标准库一起使用。
某些带有iterator
标记为forward_iterator_tag
并且reference == int
Container<int>
是否有效?
[forward.iterators]中列举了这些要求:
如果满足以下条件,则类或指针类型
X
满足前向迭代器的要求:
X
满足输入迭代器(24.2.3)的要求,X
满足DefaultConstructible要求(17.6.3.1),- 如果
X
是一个可变迭代器,则reference
是对T
的引用; 如果X
是const迭代器,则reference是对const T
的引用。- [...]
因此,如果您的容器具有reference
== int
,则它不满足正向迭代器的要求。 从技术上讲,我认为vector<bool>::iterator
只是一个输入迭代器,即使它被标记为随机访问迭代器也是如此。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.