C++ での範囲ベースの for ループ
 
この記事では、C++ で範囲ベースの for ループを使用する方法に関する複数の方法を示します。
C++ で範囲ベースの for ループを使って std::map の要素を表示する
    
範囲ベースの for ループは、通常の for ループと同等の読みやすいものです。配列または begin および end メンバー関数を持つその他のオブジェクトをトラバースするために使用できます。auto キーワードと要素への参照を使用してアクセスすることに注意してください。この場合、item は std::map の単一要素を指し、これはたまたまタイプ std::pair です。したがって、キーと値のペアにアクセスするには、first/second キーワードを使用してアクセスするために特別なドット表記が必要です。
#include <iostream>
#include <map>
using std::cin;
using std::cout;
using std::endl;
using std::map;
using std::string;
int main() {
  map<int, string> fruit_map = {{
                                    1,
                                    "Apple",
                                },
                                {
                                    2,
                                    "Banana",
                                },
                                {
                                    3,
                                    "Mango",
                                },
                                {
                                    4,
                                    "Cocoa",
                                }};
  for (auto &item : fruit_map) {
    cout << "[" << item.first << "," << item.second << "]\n";
  }
  return EXIT_SUCCESS;
}
出力:
[1,Apple]
[2,Banana]
[3,Mango]
[4,Cocoa]
あるいは、範囲ベースのループは、構造化バインディング表記を使用して要素にアクセスし、コードブロックをより簡潔にすることができます。次の例では、std::map ペアにアクセスするためのこのようなバインディングの使用法を示します。
#include <iostream>
#include <map>
using std::cin;
using std::cout;
using std::endl;
using std::map;
using std::string;
int main() {
  map<int, string> fruit_map = {{
                                    1,
                                    "Apple",
                                },
                                {
                                    2,
                                    "Banana",
                                },
                                {
                                    3,
                                    "Mango",
                                },
                                {
                                    4,
                                    "Cocoa",
                                }};
  for (const auto& [key, val] : fruit_map) {
    cout << "[" << key << "," << val << "]\n";
  }
  return EXIT_SUCCESS;
}
出力:
[1,Apple]
[2,Banana]
[3,Mango]
[4,Cocoa]
C++ でレンジベースの for ループを使って struct のメンバーを表示する
構造化バインディングは、トラバースされた要素が複数のデータメンバーを持つ比較的大きな構造を表す場合に非常に役立ちます。次のサンプルコードに示すように、これらのメンバーは識別子リストとして宣言され、struct.member 表記なしで直接参照されます。ほとんどの STL コンテナは、範囲ベースの for ループを使用してトラバースできることに注意してください。
#include <iostream>
#include <list>
using std::cin;
using std::cout;
using std::endl;
using std::list;
using std::string;
struct Person {
  string name;
  string surname;
  int age;
};
int main() {
  list<Person> persons = {{"T", "M", 11},
                          {"R", "S", 23},
                          {"J", "R", 43},
                          {"A", "C", 60},
                          {"D", "C", 97}};
  for (const auto& [n, s, age] : persons) {
    cout << n << "." << s << " - " << age << " years old" << endl;
  }
  return EXIT_SUCCESS;
}
出力:
T.M - 11 years old
R.S - 23 years old
J.R - 43 years old
A.C - 60 years old
D.C - 97 years old
        チュートリアルを楽しんでいますか? <a href="https://www.youtube.com/@delftstack/?sub_confirmation=1" style="color: #a94442; font-weight: bold; text-decoration: underline;">DelftStackをチャンネル登録</a> して、高品質な動画ガイドをさらに制作するためのサポートをお願いします。 Subscribe
    
著者: 胡金庫
    
