C++でプログラミングを行う際、複数のデータをまとめて管理するために「配列」は避けて通れない基本的なデータ構造です。
しかし、C++には昔ながらの「C言語スタイルの配列」と、便利な標準ライブラリである「std::vector」や「std::array」が混在しており、「結局、どうやって宣言するのが正解なの?」と迷ってしまうことも少なくありません。
「2次元配列を簡単に初期化したい」
「とりあえず全部0で埋めたい」
この記事では、上記のようなことを実現できるよう、C++における基本的な配列の宣言・初期化方法から、多次元配列の作り方、そして現在の開発現場で推奨されるモダンな配列の扱い方まで、サンプルコード付きで徹底解説します。
![]() 執筆者:マヒロ |
|
基本的な配列の宣言と初期化方法
まずは、最も基本となる「固定長配列(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++)では、配列のサイズ指定には「コンパイル時定数(const や constexpr)」が必要です。
つまり、実行時にユーザーに入力してもらった値で配列のサイズを決めることは、基本的にはできません。
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 はメモリ管理を自動で行ってくれるため、new や delete といった手動のメモリ操作が不要で、非常に安全かつ便利です。
生配列よりも 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++の案件を探しやすくなります。
転職エージェントも副業エージェントも、登録・利用は完全無料なので、どんな求人や副業案件があるのか気になる方は、気軽に利用してみるとよいでしょう。



