C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++とJavaにおけるforeachループの使い方をわかりやすく解説

C++とJavaには、通常のforループとは異なる「foreachループ」(Javaでは拡張forループとも呼ばれます)が用意されています。このループはC言語には存在せず、C++ではC++11から、JavaではJDK 1.5.0から導入されました。

foreachループの最大のメリットは、初期化・条件判定・インクリメント/デクリメントといった処理を記述せずに済むため、配列やコンテナ内の各要素へすばやくシンプルにアクセスできる点です。名前は「foreach」ですが、実際の記述には「for」キーワードを使用する点に注意しましょう。構文は通常のforループとは異なります。

foreachループの基本構文

for(データ型 item : 配列) {
   // 処理
}

コロン(:)の左側に要素を受け取る変数を、右側に走査対象の配列やコンテナを指定します。これだけで全要素を順番に処理できます。

C++でのforeachループ

まずはC++での具体例を見てみましょう。int型配列の全要素を順番に出力しています。

サンプルコード

#include <iostream>
using namespace std;

int main() {
    int myArr[] = { 99, 15, 67 };

    // foreachループ
    for (int ele : myArr)
        cout << ele << endl;
}

実行結果

99
15
67

Javaでのforeachループ

続いてJavaの例です。int型配列だけでなく、String型の配列にも同じ構文でアクセスできる点がポイントです。

サンプルコード

public class Test {
    public static void main(String args[]) {
        int [] numbers = {10, 20, 30, 40, 50};
        for(int x : numbers ) {
            System.out.print( x );
            System.out.print(",");
        }
        System.out.print("\n");

        String [] names = {"James", "Larry", "Tom", "Lacy"};
        for( String name : names ) {
            System.out.print( name );
            System.out.print(",");
        }
    }
}

実行結果

10, 20, 30, 40, 50,
James, Larry, Tom, Lacy,

まとめ

foreachループを使えば、配列やコレクションの全要素に対する処理を簡潔に記述できます。添字(インデックス)管理が不要になるため、範囲外アクセスなどのミスも減らせます。C++11以降、Java 5以降で利用可能な便利な機能なので、要素の列挙処理が必要な場面では積極的に活用しましょう。

  1. C++とC#におけるforeachループの使い方を徹底解説

    コレクションや配列の各要素を順番に処理したい場合、foreachループは非常に便利な構文です。従来のforループではインデックスの管理が必要でしたが、foreachを使えば要素そのものを直接取り出して処理できるため、コードがシンプルになり、バグも減らせます。この記事では、C++とC#それぞれにおけるforeachの書き方と実行例をわかりやすく解説します。 C++におけるforeach(範囲ベースforループ) C++には厳密には「foreach」という名前のキーワードは存在しませんが、C++11で導入された範囲ベースforループ(range-based for loop)が同等の機能を提供し

  2. Java入門:Collection.stream().forEach()とCollection.forEach()の違いを徹底解説

    Javaのコレクションを反復処理する方法として、Collection.stream().forEach()とCollection.forEach()の2つがよく使われます。一見似ているこの2つのメソッドですが、内部の仕組みや動作には重要な違いがあります。Collection.forEach() の特徴Collection.forEach() は、コレクション自身が持つイテレータを使用して反復処理を行います。多くのコレクションでは、反復処理中の構造的な変更(要素の追加・削除)は許可されていません。反復中に要素を追加または削除すると、ConcurrentModificationException(