[英]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.