このコードの操作:
int myArray[10];
for(int i = 0; i < myArray.size(); i++)
cout << myArray[i] << endl;
コンパイラ エラー:
エラー: 'myArray' のメンバー 'size' の要求は、非クラス型 'int [10]' です |
明らかな何かが欠けているに違いありませんが、わかりません。
このコードの操作:
int myArray[10];
for(int i = 0; i < myArray.size(); i++)
cout << myArray[i] << endl;
コンパイラ エラー:
エラー: 'myArray' のメンバー 'size' の要求は、非クラス型 'int [10]' です |
明らかな何かが欠けているに違いありませんが、わかりません。
配列型はクラス型ではなく、メンバー関数を持ちません。したがって、配列には というメンバー関数がありませんsize
。ただし、配列にはコンパイル時の固定サイズがあるため、サイズは10
次のようになります。
for(int i = 0; i < 10; i++)
cout << myArray[i] << endl;
もちろん、マジック ナンバーを避け、サイズを名前付き定数のどこかに入れるのが最善です。あるいは、配列型オブジェクトの長さを決定するための標準ライブラリ関数があります。
for(int i = 0; i < std::extent(myArray); i++)
cout << myArray[i] << endl;
ただし、std::array
代わりに、配列型オブジェクトをカプセル化し、size
メンバー関数を提供するものを使用できます。
std::array<int, 10> myArray;
for(int i = 0; i < myArray.size(); i++)
cout << myArray[i] << endl;
sizeof
オペレーターが必要です:
int myArray[10];
for(int i = 0; i < (sizeof(myArray)/sizeof(myArray[0])); i++)
cout << myArray[i] << endl;
C++ の静的配列のサイズは定義されていません。静的配列を使用する必要がある場合は、別の変数で配列の長さを追跡する必要があります。
お気に入り:
const int size = 10;
int arr[size];
for(int i = 0; i < size; i++){
cout << myArray[i] << endl;
}
一方、静的配列を使用する必要がない場合は、代わりに std::vector を使用することをお勧めします。
std::vector<int> arr;
for (int i = 0, max = arr.size(); i<max;i++){
[...]
}