0

以前にC++で変数を使用して配列サイズを定義しようとしましたが、動的メモリの概念を完全には理解していませんが、機能しました。ただし、この場合、配列「ポイント」に対して同じことを行う方法がわかりません。

num=50;
struct pos
{
double x;
};

 struct pos point[num]; 

私が見落としている明らかなものはありますか?

4

1 に答える 1

4

これらのタイプの配列サイズはコンパイル時の定数でなければならないため、コンパイラは予約するメモリの量を認識しています。

int count = 50;
int arr[count] // error!

static const int count = 50;
int arr[count]; // OK!

もう 1 つのオプションは、実行時にサイズがわかっている動的に割り当てられるメモリです。

int count = 50;
int* arr = new int[count];
delete [] arr;

ただし、通常、生のポインターとメモリ割り当てを自分で処理することは望ましくなく、代わりに次のことを優先する必要があります。

#include <vector>

int count = 50;
std::vector<int> arr(count);

これは、コピー可能であると提供したカスタムタイプでも機能します (ヒント: サンプルpos構造はコピー可能です)。

#include <vector>

int count = 50;
std::vector<pos> arr(count);

arr[0].x = 1;
// ... etc
arr[49].x = 49;

std::vector豊富なインターフェースがあり、詳細はすべてここにあります

于 2012-11-26T22:38:37.880 に答える