c++で配列を後から指定するには

CFAから一週間。しばらく離れていたプログラミングや数学のほうを取り戻そうとしているところで、昔買ったc++の本を復習中。

この中で、2項ツリーの紹介が出てくるのだが、コードをそのまま写しても動かないところが出てくる。具体的には、2項ツリーのステップ数をNという変数で与えた上でその変数に相当する配列を後で用意しようとしている。

シンプルに言うと、下記のようなことをやりたい。

#include <iostream>
using namespace std;

int main(){
  int n;
  cout << "Enter the number of array" << endl;
  cin >> n;

  int a[n];
  for (int i=0;i<n;i++){
      a[i]=i*i; //適当
  }
  for (int i=0;i<n;i++){
      cout << a[i] <<endl;
  }
}

でもこれは動かない。エラーを見ると、

error C2057: 定数式が必要です。

とか出る。

これは、コンパイルの時に配列のサイズが決まっていなければいけないために発生するエラーで、解決方法の一つとしてnew演算子・ポインタを使うものがある。

#include <iostream>
using namespace std;

int main(){
  int n;
  cout << "Enter the number of array" << endl;
  cin >> n;

  int* a;
  a = new int[n];
  for (int i=0;i<n;i++){
      a[i]=i*i; //適当
  }
  for (int i=0;i<n;i++){
      cout << a[i] <<endl;
  }
  delete[] a;
}

こうすると、入力されたnサイズの配列を利用することができる。ちなみにC言語だとmallocとかいうのを使うらしいけど不勉強なので詳しくは知りません。他の方法だとベクトルを利用する方法があると思うけど、試していないのでとりあえずあとで試すとして、教科書を読みすすめていきたいと思う。

それにしてもCFAに関してはまだ一週間ということで、結果発表が待ち遠しすぎる。。協会のサイトには8週間以内と書かれていたと思うが、大体毎年7月25日前後で、いつ発表されるかというのも後日協会サイトで連絡があるはず、、だが現時点ではまだ無さそう。しばらくプログラミングでヒマをつぶそう。