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

【C++入門】通常の配列を任意のデフォルト値で初期化する方法

配列全体を0で初期化する最も簡単な方法

C++では、配列全体を0で初期化するのは非常に簡単です。宣言時に以下のように {0} を指定するだけで、すべての要素が0になります。

int arr[10] = {0};

0以外の値ではうまくいかない理由

しかし、同じ方法で配列全体を0以外の値で初期化することはできません。次のようなコードを書いても、意図した結果にはなりません。

int arr[10] = {5};

この場合、最初の要素だけが5で初期化され、残りの9個の要素はすべて0で初期化されます。これは、初期化リストで明示的に値を指定しなかった要素には自動的に0が代入されるというC++の仕様によるものです。

forループを使って任意の値で初期化する

0以外のデフォルト値で配列全体を初期化したい場合は、forループを使用するのが基本的な方法です。

for(int i = 0; i < 10; i++) {
    arr[i] = 5;
}

この例では、配列のすべての要素が5で初期化されます。

サンプルプログラム

ここまで説明した3つのパターンの動作を確認できる完全なプログラムが以下です。

#include <iostream>
using namespace std;
int main() {
    int a[10] = {0};
    int b[10] = {5};
    int c[10];
    for(int i = 0; i<10; i++) {
        c[i] = 5;
    }
    cout<<"Elements of array a: ";
    for(int i = 0; i<10; i++) {
        cout<< a[i] <<" ";
    }
    cout<<"\n";
    cout<<"Elements of array b: ";
    for(int i = 0; i<10; i++) {
        cout<< b[i] <<" ";
    }
    cout<<"\n";
    cout<<"Elements of array c: ";
    for(int i = 0; i<10; i++) {
        cout<< c[i] <<" ";
    }
    cout<<"\n";
    return 0;
}

実行結果

上記プログラムの出力は次のとおりです。

Elements of array a: 0 0 0 0 0 0 0 0 0 0
Elements of array b: 5 0 0 0 0 0 0 0 0 0
Elements of array c: 5 5 5 5 5 5 5 5 5 5

補足:std::fillを使うモダンな方法

より現代的なC++では、<algorithm>ヘッダーの std::fill を使えば、ループを自分で書かずに配列全体を任意の値で埋めることができます。

#include <algorithm>

int arr[10];
std::fill(std::begin(arr), std::end(arr), 5);

可読性が高く意図も伝わりやすいため、実務ではforループよりも std::fill が使われることも多いです。状況に応じて使い分けるとよいでしょう。


  1. C++で指定された値を持つ葉ノードを削除するアルゴリズム

    問題の概要二分木と整数 target が与えられたとき、値が target と一致するすべての葉ノードを削除することを考えます。ここで重要なのは、葉ノードを削除した結果、その親ノードが新たに葉ノードになり、かつその値が target と一致する場合には、その親ノードも同様に削除しなければならないという点です。この操作は、削除できるノードがなくなるまで繰り返し行います。例えば、下図のような二分木があり、target が 2 の場合、最終的な木は次のようになります。解法のアプローチこの問題は、再帰を用いた後順(ボトムアップ)処理によって効率的に解くことができます。具体的な手順は以下の通りです。ルー

  2. C++での変数の初期化|静的初期化と動的初期化の違いを解説

    C++における変数の初期化とは 変数とは、ユーザーが任意につける名前のことで、データを格納するための「箱」のような役割を持ちます。変数を宣言・初期化する際にはデータ型を使用し、その変数用のメモリが割り当てられます。C++にはint(整数型)、char(文字型)、float(浮動小数点型)など、用途に応じたさまざまなデータ型が用意されています。 変数の初期化方法は、大きく分けて次の2つがあります。 静的初期化(static initialization) − プログラムのコード内であらかじめ値を代入する方法 動的初期化(dynamic initialization) − プログラムの実行時(