gpt4 book ai didi

c++ - 前向迭代器 iterator_traits::reference 的要求

转载 作者:太空宇宙 更新时间:2023-11-04 16:09:21 25 4
gpt4 key购买 nike

我想弄清楚对 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>iterator标记为 forward_iterator_tagreference == int有效吗?

最佳答案

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

A class or pointer type X satisfies the requirements of a forward iterator if

  • X satisfies the requirements of an input iterator (24.2.3),
  • X satisfies the DefaultConstructible requirements (17.6.3.1),
  • if X is a mutable iterator, reference is a reference to T; if X is a const iterator, reference is a reference to const T,
  • [...]

所以如果你的容器有 reference == int ,则不满足前向迭代器的要求。我想这在技术上是 vector<bool>::iterator只是一个输入迭代器,即使它被标记为随机访问迭代器。

关于c++ - 前向迭代器 iterator_traits::reference 的要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30417500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com