新C++編このページの概要このページでは、純粋な意味での配列(生の配列)を取り上げます。配列と呼んで使ってきました。した方法は安全であり、便利な機能の恩恵を受けられるので、原則としてはこれが適切な選択ですが、効率を求める場合や、C言語のプログラムとの連携を図る場合などには、生の配列を使う必要があります。要点だけをさっと確認したい方は、「まとめ」をご覧ください。同じ型のオブジェクトを並べたデータ構造で、前のページで説明したように、メモリ上では隙間なく連続的に並ぶという性質を持ちます。配列として使ってきましたが、これらは配列そのものというよりは、配列を取り扱いやすくしたクラスです。データメンバとして配列を保持するという仕組みになっています。このページで取り上げるのは、純粋な意味での配列です。区別を付けるために、「生の配列」のように表現されることがありますが、紛らわしくなってしまう場面を除いて、基本的に「配列」と呼ぶことにします。配列は、要素そのもののためのメモリしか使わないうえに、隙間なく並ぶ保証があるため、メモリを無駄なく利用できます。した構造は処理効率の面でも優れる傾向があります。備える便利な機能はありませんし、範囲外アクセスへの備えもありません。優先して使うべきです。効率を求めるときなど、あえて生の配列を使うという選択もありえます。いうクラスも存在します。ないC言語のプログラムとのあいだで連携を図るときにも必要性があります。配列を定義する配列は、これまでと同じ方法で定義や宣言を行ってから使用します。配列でない変数との違いは「要素数」の指定があることです。初期化子;「型名」には要素の型を指定します。ような感じで表記されることがあります。含むかどうかは選択できます。1以上の整数になる定数式でなければならず2、要素数はあとから変更できません。コンパイル時点で要素数は確定しており、要素の追加や削除は不可能です。要素の初期値は想定通りか?ストレージ期間に関するルールも同様に存在します(「メモリとオブジェクト」のページを参照)。自動ストレージ期間を持つ場合、初期化子を与えないと、要素が初期化されていません。与えていない場合、要素がクラス型であれば、それぞれのデフォルトコンストラクタが呼ばれます。用いた記法を使うことができ、集成体初期化が行えます(「構造体」のページを参照)。内側に書き並べた初期化子を、要素に順番に適用していきます。「要素数」の指定に対して、初期化子のほうが多い場合はコンパイルエラーになります。初期化子のほうが少ない場合は、残りの要素は値初期化されます。ある配列を次のように定義できます。自体は省略できません)した場合は、「初期化子」の内容から要素数が判断されます。初期化子を与えるのであれば、「要素数」の指定は省略して、コンパイラに判断させたほうが間違いが起こりにくいでしょう。ほかの配列を使って初期化することはできません。参照型を指定することもできません。構造体(クラス)のデータメンバとして配列を宣言することも可能です。事情があるため、新C++編では利用を控えています(「構造体」のページを参照)。使わずに、あえて生の配列を使うという状況では、効率が重要かもしれません。その場合、初期化にかかるコストを避けるために初期化しないという選択もありえます。入力を受け取るためのバッファのようなものも、あえて初期化せずに使う例として挙げられます。よってアクセスします。したときに何番目に当たるものかを指定します。この範囲外の要素へのアクセスは未定義の動作です。}}実行結果:109930イテレータ配列のすべての要素を順番にアクセスするのなら、範囲for文を使うのが手軽で安全です。std::end関数(「イテレータ」のページを参照)を使うこともできるということです。std::cend関数も使えます(「イテレータ」のページを参照)。}}実行結果:152535同様に、std::rbegin関数、std::rend関数、std::crbegin関数、std::crend関数もそれぞれ使えます。使って要素間を移動できます。範囲外アクセスには注意してください。for文を使って順番にアクセスしたいとき、ループの条件のところに要素数が必要になります。このような指定の仕方をすると、変更に弱いプログラムになってしまいますし、危険でもあります。後から要素を増やしたら、忘れずに修正しなければいけませんし、かぞえ間違えてしまうかもしれません。そこで、配列の要素数は計算によって求めるようにします。要素数が得られるようになりました3。配列の要素はすべて同じ型、つまり同じ大きさですし、要素は隙間なく並んでいます。