forward iterator iterator_traits :: reference

时间:2015-05-23 20:55:21

标签: c++ iterator

我正在努力弄清楚对forward_iterators'reference类型的要求是什么。在明显的情况下,您将拥有value_type = T;reference = T&;。阅读关于前向迭代器要求的cppreference page,我看到了

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是否既不是参考文献也不支持作业,会与标准一致库。

Container<int>标记为iteratorforward_iterator_tag的某些reference == int是否有效?

1 个答案:

答案 0 :(得分:5)

要求在[forward.iterators]中列举:

  

如果

,类或指针类型X满足前向迭代器的要求      
      
  • X满足输入迭代器(24.2.3),
  • 的要求   
  • X满足DefaultConstructible要求(17.6.3.1),
  •   
  • 如果X是可变迭代器,则reference是对T的引用;如果X是常量迭代器,则引用是引用   到const T
  •   
  • [...]
  •   

因此,如果您的容器有reference == int,那么它不符合forward iterator的要求。我认为技术上使vector<bool>::iterator只是一个输入迭代器,即使它被标记为随机访问迭代器。