首頁 >後端開發 >C++ >如何使我的自訂類型與基於 C 範圍的 For 迴圈配合使用?

如何使我的自訂類型與基於 C 範圍的 For 迴圈配合使用?

Susan Sarandon
Susan Sarandon原創
2024-12-18 14:39:19941瀏覽

How Can I Make My Custom Type Work with C   Range-Based For Loops?

自訂基於範圍的For 迴圈的類型

要讓自訂類型與基於範圍的for 迴圈一起使用,您可以指定begin( ) 和end() 方法適合您的類型。這些方法應傳回迭代器,使循環能夠迭代類型的元素。

命名空間注意事項

如果您的自訂類型屬於命名空間,則應該定義該命名空間內的 begin() 和 end() 。例如,如果您的類型是 xml::my_type,則應定義 xml::begin() 和 xml::end() 以使其可供基於範圍的 for 迴圈存取。

要求對於begin() 和end()

您定義的begin() 和end() 方法必須滿足以下條件要求:

  • 它們必須傳回迭代器或行為類似迭代器的物件。
  • 它們必須為基於範圍的for 循環正常運作提供必要的運算子和功能,包括以下內容:

    • 前綴自增運算子( )
    • 比較運算子(!=)
    • 解引用運算符(*)
    • 公共析構函數

實作begin() 和end 的兩個選項()

有兩種主要方法來實作begin() 和end()對於您的自訂類型:

  1. 成員函數: 建立 begin() 和 end() 作為您類型的成員函數。當您可以控制類型的實作時,這是首選方法。
  2. 自由函數: 在類型外部定義名為 begin() 和 end() 的自由函數,將您的類型視為一個論點。當您無法控制類型的實作但仍希望使其與基於範圍的 for 迴圈相容時,此方法非常有用。

範例:

考慮以下範例:

struct my_type {
    int data[5];

    // Define begin() and end() as member functions
    int* begin() { return &data[0]; }
    int* end() { return &data[5]; }
};

透過定義這些成員函數,現在可以迭代my_type 的實例超過使用基於範圍的for 循環:

my_type mt;
for (int& value : mt) {
    // Do something with each value in mt
}

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

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