簡體   English   中英

前向迭代器iterator_traits :: reference的要求

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM