首頁 > 後端開發 > C++ > 如何使用基於範圍的 For 循環使我的自訂 C 類型可迭代?

如何使用基於範圍的 For 循環使我的自訂 C 類型可迭代?

Linda Hamilton
發布: 2024-12-23 22:03:09
原創
600 人瀏覽過

How Can I Make My Custom C   Types Iterable Using Range-Based For Loops?

使用自訂類型簡化迭代

在 C 11 中,基於範圍的 for 迴圈的引入簡化了序列迭代的過程。這些循環遵循標準化模式:

for (Type& v : a) { ... } // equivalent to traditional loop below
for (auto iv = begin(a); iv != end(a); ++iv) {
  Type& v = *iv;
  ...
}
登入後複製

您可以將此功能擴展到您的自訂類型,允許它們在基於範圍的循環中使用,遵循以下準則:

方法1 :成員函數宣告

  • 在型別X 中定義begin() 和end()成員函數,它們傳回具有類似迭代器的物件

方法2:自由函數呼叫

  • 在與類型X 相同的命名空間中建立自由函數begin(X& ) 和end(X&),再次傳回迭代器類別物件。

這些函數將為以下物件提供必要的初始化(begin())和終止(end())點基於範圍的循環。

函數傳回值要求

begin() 和 end() 傳回的物件不需要是實際的迭代器。但是,它們必須滿足以下要求:

  • 重載pre- 以遞增物件
  • 確保有效的初始化表達式
  • 支援二進位!= 布林上下文
  • 實現一元 *以傳回可指派給循環的值變數
  • 提供公共析構函數

其他注意事項

  • 如果您的自訂類型屬於xml空間,請定義xml::begin()以避免與std::begin() 的潛在衝突。
  • 未來的 C 修訂版可能會解耦以下類型begin() 和 end(),允許「惰性結束」計算。
  • C 17 引入了一種新類型 null_sentinal_t,它有助於在空終止字元緩衝區上進行基於範圍的循環。
  • 基於範圍的循環使用儲存在 auto&& 引用中的臨時變量,這意味著您的 begin() 和 end() 重載無法檢測它們是否正在運行臨時的。

以上是如何使用基於範圍的 For 循環使我的自訂 C 類型可迭代?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板