記事内にはプロモーションが含まれています

【C++】配列の宣言・初期化方法!2次元配列や要素数の省略など

【C++】配列の宣言・初期化方法!2次元配列や要素数の省略など C++

C++でプログラミングを行う際、複数のデータをまとめて管理するために「配列」は避けて通れない基本的なデータ構造です。

しかし、C++には昔ながらの「C言語スタイルの配列」と、便利な標準ライブラリである「std::vector」や「std::array」が混在しており、「結局、どうやって宣言するのが正解なの?」と迷ってしまうことも少なくありません。

「配列の要素数を変数で指定したい」
「2次元配列を簡単に初期化したい」
「とりあえず全部0で埋めたい」

この記事では、上記のようなことを実現できるよう、C++における基本的な配列の宣言・初期化方法から、多次元配列の作り方、そして現在の開発現場で推奨されるモダンな配列の扱い方まで、サンプルコード付きで徹底解説します。

【本記事の信頼性】
プロフィール
執筆者:マヒロ
  • 執筆者は元エンジニア
  • SES⇒大手の社内SE⇒独立
  • 現在はこじんまりとしたプログラミングスクールを運営
  • モットーは「利他の精神」

基本的な配列の宣言と初期化方法

まずは、最も基本となる「固定長配列(C言語スタイル)」の宣言と初期化について見ていきましょう。
C++では、型と要素数を指定して配列を作成します。

要素数を指定して宣言する

配列を宣言する基本構文は 型名 配列名[要素数]; です。

#include <iostream>

int main() {
    // int型で要素数5の配列を宣言(中身は不定)
    int numbers[5];

    // 値を代入
    numbers[0] = 10;
    numbers[1] = 20;

    std::cout << "numbers[0]: " << numbers[0] << std::endl;
    
    return 0;
}

int numbers[5]; と宣言することで、整数(int)を5つ格納できる領域がメモリ上に確保されます。

注意点として、この段階では中身の値は「不定(ゴミデータ)」です。
(グローバル変数の場合は0初期化されますが、ローカル変数は不定)

使用する前に必ず値を代入するか、次項の初期化を行う必要があります。

初期化リストを使って値を代入する

宣言と同時に具体的な値を設定したい場合は、波括弧 {} を使った「初期化リスト」を使用します。

#include <iostream>

int main() {
    // 宣言と同時に値をセット
    int scores[3] = {80, 95, 70};

    // 範囲for文(C++11以降)で出力
    for (int score : scores) {
        std::cout << score << " ";
    }
    std::cout << std::endl;

    return 0;
}

実行結果

80 95 70 

{} の中にカンマ区切りで値を記述することで、先頭から順に値が格納されます。

もし int scores[5] = {1, 2}; のように要素数より少ない値を指定した場合、残りの要素は自動的に「0」で初期化されます。

要素数を省略して宣言する(サイズ推論)

初期化リストを記述する場合に限り、[] の中の要素数を省略できます。

コンパイラが値の個数から自動的にサイズを決定してくれます。

// 要素数は自動的に「4」になる
double weights[] = {1.5, 2.5, 3.0, 4.2};

管理が楽になるため、初期値が決まっている場合はこの書き方が推奨されます。

すべての要素を0で初期化するテクニック

「とりあえず配列の中身をすべて0にしておきたい」という場合は、空の波括弧 {} を使います。

// 全要素(10個)が0で初期化される
int counters[10] = {}; 
// または
int counters2[10] = {0};

これはバグを防ぐために非常に重要なテクニックです。
配列を宣言したら、とりあえず {} で初期化しておく癖をつけると良いでしょう。

2次元配列(多次元配列)の宣言と初期化

画像データや行列計算などでは、縦と横の広がりを持つ「2次元配列」が使われます。
宣言方法は、[] を2つ繋げるだけです。

2次元配列の基本構文

#include <iostream>

int main() {
    // 2行3列の配列を宣言し、初期化
    int matrix[2][3] = {
        {1, 2, 3},  // 0行目
        {4, 5, 6}   // 1行目
    };

    // ネストしたfor文で出力
    for (int i = 0; i < 2; ++i) {
        for (int j = 0; j < 3; ++j) {
            std::cout << "matrix[" << i << "][" << j << "] = " << matrix[i][j] << "\n";
        }
    }

    return 0;
}

実行結果

matrix[0][0] = 1
matrix[0][1] = 2
matrix[0][2] = 3
matrix[1][0] = 4
matrix[1][1] = 5
matrix[1][2] = 6

int matrix[2][3] は、「int型の要素3つを持つ配列」が「2つ」ある状態を作ります。

初期化リストも入れ子構造にすることで、視覚的にも行と列の関係がわかりやすくなります。

配列の要素数に変数は使える?(動的確保とvector)

C++の学習を始めて最初にぶつかる壁が、「要素数に変数を使えない」という問題です。

固定長配列の制限(定数が必要)

C++の標準仕様(ISO C++)では、配列のサイズ指定には「コンパイル時定数(constconstexpr)」が必要です。

つまり、実行時にユーザーに入力してもらった値で配列のサイズを決めることは、基本的にはできません。

int n;
std::cin >> n;

// 【NG】コンパイルエラーになる(環境によっては動くこともあるが非推奨)
// int arr[n]; 

// 【OK】定数なら可能
const int SIZE = 10;
int arr[SIZE];

一部のコンパイラ(GCCなど)では拡張機能として「可変長配列(VLA)」をサポートしていますが、C++の標準機能ではないため使用は避けるべきです。

要素数が決まっていない場合は std::vector を使おう

「実行時にサイズを決めたい」「後からデータを追加したい」という場合は、生配列ではなく、標準ライブラリの std::vector を使用します。

#include <iostream>
#include <vector>

int main() {
    int n;
    std::cout << "要素数を入力してください: ";
    std::cin >> n;

    // 変数nを使って動的に配列を作成(すべて0で初期化)
    std::vector<int> dynamicArr(n, 0);

    // データの追加も可能
    dynamicArr.push_back(100);

    std::cout << "現在のサイズ: " << dynamicArr.size() << std::endl;

    return 0;
}

std::vector はメモリ管理を自動で行ってくれるため、newdelete といった手動のメモリ操作が不要で、非常に安全かつ便利です。

生配列よりも std::array や std::vector を使うべき理由

現代のC++開発(Modern C++)では、これまで紹介した int arr[10]; のような生配列(Cスタイル配列)の使用はあまり推奨されていません。

代わりに、以下の2つのコンテナクラスを使い分けるのがベストプラクティスです。

固定長なら std::array

要素数がコンパイル時に決まっていて変更しない場合は、std::array を使います。

生配列と同じパフォーマンスを持ちながら、型安全性や便利なメンバ関数(.size() など)を備えています。

#include <array>
#include <algorithm> // sort用

int main() {
    // int型、要素数5の配列
    std::array<int, 5> data = {3, 1, 4, 1, 5};

    // ソートなどのアルゴリズムも適用しやすい
    std::sort(data.begin(), data.end());

    return 0;
}

可変長なら std::vector

要素数が変わる可能性がある、またはサイズが大きくなる可能性がある場合は、迷わず std::vector を選びましょう。

現在、C++の配列操作において最も一般的で強力なツールです。

C++のスキルを活かして年収を上げる方法

以上、C++の配列の宣言・初期化方法について解説しました。

なお、C++のスキルがある場合には、「転職して年収をアップさせる」「副業で稼ぐ」といった方法を検討するのがおすすめです。

C++を扱えるエンジニアは希少価値が高いため、転職によって数十万円の年収アップはザラで、100万円以上年収が上がることも珍しくありません。

なお、転職によって年収を上げたい場合は、エンジニア専門の転職エージェントサービスを利用するのが最適です。

今すぐ転職する気がなくとも、とりあえず転職エージェントに無料登録しておくだけで、スカウトが届いたり、思わぬ好待遇の求人情報が送られてきたりするというメリットがあります。

併せて、副業案件を獲得できるエージェントにも登録しておくと、空いている時間を活かして稼げるようなC++の案件を探しやすくなります。

転職エージェントも副業エージェントも、登録・利用は完全無料なので、どんな求人や副業案件があるのか気になる方は、気軽に利用してみるとよいでしょう。