を見つけることがヌルを探し、最初にnullにすべての配列要素を初期化します。あなたはプレーンな配列に固執したい場合、あなたはこのような何かを行うことができます。
int arr[] = new int[15];
unsigned int arr_length = 0;
を今、あなたは、配列の最後に要素を追加したい場合は、この操作を行うことができます。
if (arr_length < 15) {
arr[arr_length++] = <number>;
} else {
// Handle a full array.
}
これはPHP同等のものほど短くて優雅ではありませんが、あなたがしようとしていたことを達成します。将来、配列のサイズを簡単に変更できるようにするには、#defineを使用します。
#define ARRAY_MAX 15
int arr[] = new int[ARRAY_MAX];
unsigned int arr_length = 0;
if (arr_length < ARRAY_MAX) {
arr[arr_length++] = <number>;
} else {
// Handle a full array.
}
これにより、後でアレイを管理する方がずっと簡単になります。 15〜100を変更すると、プログラム全体で配列のサイズが適切に変更されます。プログラムがコンパイルされると変更できないので、配列を期待される最大サイズに設定する必要があることに注意してください。たとえば、配列のサイズが100の場合、101要素を挿入することはできません。あなたがこれを行うことができます
あなたは、配列の末尾から要素を使用する場合は、:あなたは先頭から要素を削除できるようにしたい場合は
if (arr_length > 0) {
int value = arr[arr_length--];
} else {
// Handle empty array.
}
を、(すなわちFIFO)、ソリューションより複雑になる。最初と最後のインデックスも必要です。
#define ARRAY_MAX 15
int arr[] = new int[ARRAY_MAX];
unsigned int arr_length = 0;
unsigned int arr_start = 0;
unsigned int arr_end = 0;
// Insert number at end.
if (arr_length < ARRAY_MAX) {
arr[arr_end] = <number>;
arr_end = (arr_end + 1) % ARRAY_MAX;
arr_length ++;
} else {
// Handle a full array.
}
// Read number from beginning.
if (arr_length > 0) {
int value = arr[arr_start];
arr_start = (arr_start + 1) % ARRAY_MAX;
arr_length --;
} else {
// Handle an empty array.
}
// Read number from end.
if (arr_length > 0) {
int value = arr[arr_end];
arr_end = (arr_end + ARRAY_MAX - 1) % ARRAY_MAX;
arr_length --;
} else {
// Handle an empty array.
}
ここでは、係数演算子(%)を使用してインデックスを折り返します。たとえば、(99 + 1)%100は0(折り返し単位)です。そして(99 + 99)%100は98(折り返し減分)です。これにより、if文を避けてコードをより効率的にすることができます。
また、コードが複雑になるにつれて#defineがどれほど役立つかを素早く確認することができます。残念ながら、このソリューションでも、100個以上の項目(または設定した最大値)を配列に挿入することはできません。 1つの項目だけが配列に格納されていても、100バイトのメモリーを使用しています。
これが他の人に推奨されるベクトルの主な理由です。ベクタはシーンの背後で管理され、構造が拡張されると新しいメモリが割り当てられます。データサイズがすでにわかっている状況では、配列と同じくらい効率的ではありませんが、ほとんどの場合、パフォーマンスの違いは重要ではありません。それぞれのアプローチにはトレードオフがあり、両方を知ることが最善です。
実際には、「そのコード」はコンパイルされません。 "int [] arr"はC/C++で配列を宣言する方法ではありません - "int arr []"です。しかし、あなたのコードには深刻な問題があります。 –