【C++学習|初心者向け】C++初心者必見!生配列を「範囲ベースfor」でスマートに扱う方法

1. 導入:なぜ範囲ベースforが必要なのか

C++の学習を始めると、必ずと言っていいほど出会うのが「配列」です。従来のC言語形式の配列(生配列)を扱う際、昔ながらの「for(int i=0; i2. 基礎知識:生配列と範囲ベースfor

「生配列」とは、int arr[5] = {1, 2, 3, 4, 5}; のように、サイズを明示して確保する伝統的な配列のことです。この配列は、メモリ上に連続してデータが並んでいるのが特徴です。
「範囲ベースfor」は、コンテナ(配列やベクタなど)の要素を最初から最後まで順番に処理するための構文です。これを使うことで、わざわざインデックス(添字)を管理する必要がなくなり、「どの配列の要素を、どの変数に取り出すか」という直感的な記述が可能になります。

3. 実装と解決策

範囲ベースforの基本構文は「for (型 変数名 : 配列名)」です。
この構文は、コンパイラが自動的に配列のサイズを認識してくれるため、ループの終了条件を自分で書く必要がありません。これにより、「配列外アクセス」という、メモリの不正な領域を読み込んでしまうバグを根本から解決できます。

4. サンプルプログラム

以下のコードをコピーして、ご自身の環境で実行してみてください。

include <iostream>

int main() {
    // 5つの要素を持つ生配列を定義
    int numbers[] = {10, 20, 30, 40, 50};

    // 範囲ベースfor文によるループ処理
    // numbersの中身を一つずつ取り出し、numという変数に代入して処理します
    for (int num : numbers) {
        std::cout << "現在の値は: " << num << std::endl;
    }

    // 参照(&)を使うと、配列の中身を直接書き換えることも可能です
    for (int &num : numbers) {
        num = 2; // 全ての要素を2倍にする
    }

    return 0;
}

5. 応用・注意点:現場で役立つポイント

ポイント1:参照(&)の活用
上記のサンプル後半のように、変数名の前に「&」をつけると、配列の要素をコピーするのではなく「参照」として扱えます。大きな構造体を扱う場合や、配列の中身を書き換えたい場合は、この参照渡しを使うのが鉄則です。

ポイント2:constの活用
もし「中身を読み取るだけで、書き換えてほしくない」場合は、const int &num : numbers のように記述しましょう。これにより、誤って中身を変更してしまうミスを防ぐことができ、プログラムの安全性が飛躍的に高まります。

注意点:ポインタとの違い
範囲ベースforは「配列のサイズがコンパイル時に確定している」場合にのみ使えます。動的に確保したポインタ(new int[n]など)に対しては、この構文を直接使うことはできないので注意してください。その場合はstd::vectorを使用するのがC++での推奨スタイルです。

コメント

タイトルとURLをコピーしました