C++とJavaにおけるforeachループ(拡張for文)の使い方を解説
foreachループとは
C++とJavaには、foreachループ(拡張forループ)と呼ばれるもう一種類のループ構文が用意されています。これは従来のforループを簡略化・改良したもので、配列やコレクションといったコンテナ内のデータにアクセスするために使用されます。
foreachループの最大の特徴は、初期化処理や終了条件、インクリメント処理を記述する必要がなく、配列の各要素に素早くアクセスできる点です。つまり、このループは「処理をn回繰り返す」ためのものではなく、「コンテナの各要素に対して何らかの処理を行う」ために使われます。
それでは、C++とJavaでforeachループがどのように使われるのか、具体的なサンプルコードを見ていきましょう。
C++でのforeachループ(範囲for文)
C++11以降では、foreachループは「範囲for文(range-based for loop)」として提供されています。基本的な構文は以下の通りです。
for (要素の型 変数名 : コンテナ) {
// 各要素に対する処理
}サンプルコード
#include <iostream>
using namespace std;
int main() {
int arr[] = { 11, 22, 33, 44, 55, 66, 77, 88, 99 };
for (int a : arr) // foreachループ
cout << a << endl;
}
実行結果
11
22
33
44
55
66
77
88
99
Javaでのforeachループ(拡張for文)
Javaでは、Java 5から拡張for文(enhanced for statement)としてforeachループが導入されました。構文はC++の範囲for文とほぼ同じです。
for (要素の型 変数名 : 配列またはコレクション) {
// 各要素に対する処理
}サンプルコード
public class Test {
public static void main(String[] args) {
int arr[] = { 11, 22, 33, 44, 55, 66, 77, 88, 99 };
for (int a : arr)
System.out.println(a);
}
}実行結果
11
22
33
44
55
66
77
88
99
まとめ
foreachループは、C++とJavaのどちらでも配列やコレクションの全要素を簡潔に処理できる便利な構文です。インデックス管理が不要なためコードの可読性が向上し、範囲外アクセスなどのバグを防ぐ効果も期待できます。単に要素を走査して処理を行うだけであれば、従来のforループよりもforeachループを使用することをおすすめします。
-
C++で解く対角トラバースII:リストのリストを対角順に出力する方法
問題の概要 「リストのリスト」である nums が与えられたとき、そのすべての要素を対角順(ダイアゴナルオーダー)に並べて出力するのがこの問題の目的です。 たとえば、次のような行ごとに長さの異なる配列(ジャグ配列)が入力として与えられた場合を考えてみましょう。 このとき、期待される出力は次のとおりです。 [1, 6, 2, 8, 7, 3, 9, 4, 12, 10, 5, 13, 11, 14, 15, 16] 解法のアプローチ この問題は、各要素を「値と座標のセット」として一旦記録し、対角線ごとの順序になるようにソートし直すことで解けます。具体的な手順は以下の通りです。 結果を格納す
-
C++でプロセスを強制終了する方法:BFSを使った実装解説
n個のプロセスがあると仮定します。各プロセスには、PID(プロセスID)と呼ばれる一意の識別子が割り当てられており、さらにPPID(親プロセスID)も持っています。各プロセスが持てる親プロセスは1つだけですが、子プロセスは1つでも複数でも構いません。これはまさに木構造と同じ形です。PPIDが0になるプロセスは1つだけであり、それはそのプロセスに親が存在しないことを意味します。また、すべてのPIDは一意な正の整数です。問題の概要ここでは、2つの整数リストを使ってプロセスの一覧を表現します。1つ目のリストには各プロセスのPIDが含まれ、2つ目のリストにはそれに対応するPPIDが含まれます。このとき