範囲ベースの for ループと互換性のあるカスタム型を作成する
カスタム データ型で範囲ベースの for ループを使用できるようにするには、次のようにします。 2 つの主なオプションがあります:
名前空間に関する考慮事項:
カスタム型が 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 } }
この変更により、終了反復子の型を開始反復子と異なるようにすることができます。イテレータ型。これにより、begin イテレータ型との不平等比較のみをサポートする「センチネル」イテレータの使用が可能になります。
以上がC の範囲ベースの for ループでカスタム型を動作させるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。