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
著者: 胡金庫