首頁 >後端開發 >C++ >如何使我的自訂類型與 C 中基於範圍的 for 迴圈一起使用?

如何使我的自訂類型與 C 中基於範圍的 for 迴圈一起使用?

DDD
DDD原創
2024-12-19 22:33:16779瀏覽

How Can I Make My Custom Types Work with Range-Based for Loops in C  ?

讓自訂類型與基於範圍的for 迴圈相容

要啟用基於範圍的for 迴圈與自訂資料類型的使用,您有兩個主要選項:

  • 提供begin() 和end()成員函數:
    在傳回迭代器的自訂類型中實作成員函數 begin() 和 end()。
  • 建立免費的begin() 和end() 函數:
    在與自訂類型相同的命名空間中定義名為begin() 和end() 的自由函數,將您的類型作為參數並傳回迭代器。

命名空間注意事項:

如果您的自訂類型駐留在命名空間(例如xml)中,則必須聲明begin() 和end()也在該命名空間內運作。不需要指定 xml::begin() 或 std::begin()。

方法要求:

begin/end 回傳值不是需要是實際的迭代器。但是,它們必須遵守特定要求:

  • 支援預自增 ( )
  • 提供有效的初始化表達式
  • 為布林值實現二進位不等於(!=)對比
  • 曝光一眾析構函數

基於範圍的for 循環擴展:

基於範圍的for 循環語法for (range_declaration : range_expression) 擴充為下列偽代碼:

{
  auto &range = range_expression;
  for (auto begin = begin_expr, end = end_expr; begin != end; ++begin) {
    range_declaration = *begin;
    loop_statement
  }
}

C 17 解耦結束類型:

在C 17 中,基於範圍的for 循環擴展偽代碼更改為:

{
  auto &range = range_expression;
  auto begin = begin_expr;
  auto end = end_expr;
  for (; begin != end; ++begin) {
    range_declaration = *begin;
    loop_statement
  }
}

此變更允許結束迭代器類型與開始迭代器類型不同。它允許使用僅支援與開始迭代器類型進行不等式比較的“哨兵”迭代器。

以上是如何使我的自訂類型與 C 中基於範圍的 for 迴圈一起使用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn