Forループを実行せずに、2D配列を宣言して値を割り当てたいと思いました。
私は次のアイデアを使用できると思った
int array[5] = {1,2,3,4,5};
これは2D配列を初期化するのにもうまく機能します。しかし、明らかに私のコンパイラはこれが好きではありません。
/*
1 8 12 20 25
5 9 13 24 26
*/
#include <iostream.h>
int main()
{
int arr[2][5] = {0}; // This actually initializes everything to 0.
arr [1] [] = {1,8,12,20,25}; // Line 11
arr [2] [] = {5,9,13,24,26};
return 0;
}
J:\ CPP\Grid> bcc32.exe Grid.cpp
Win32向けBorland C++ 5.5.1 Copyright(c)1993、2000 Borland
Grid.cpp:
エラーE2188 Grid.cpp 11:関数main()の式の構文
エラーE2188 Grid.cpp 12:関数main()の式構文
警告W8004 Grid.cpp 14: 'arr'には、関数main()で使用されない値が割り当てられます
*コンパイルで2つのエラー*
私の値のセットで2D配列を初期化する正しい方法は何かを助けてください。
このような:
int main()
{
int arr[2][5] =
{
{1,8,12,20,25},
{5,9,13,24,26}
};
}
これはC++の教科書でカバーする必要があります。どちらを使用していますか?
とにかく、std::vector
またはいくつかの既製のマトリックスクラス。 Boostから。
CまたはC++で多次元配列を初期化する適切な方法は
int arr[2][5] = {{1,8,12,20,25}, {5,9,13,24,26}};
必要に応じて、この同じトリックを使用して、より高次元の配列を初期化することもできます。
また、初期コードに注意してください-1インデックス付きオフセットを使用して配列を初期化しようとしていました。これはコンパイルされませんでしたが、C配列のインデックスが0であるため問題が発生します。
配列のすべての次元を指定する必要がないことを指摘したいだけです。
コンパイラは、左端の次元を「推測」できます。
#include <stdio.h>
int main(void) {
int arr[][5] = {{1,2,3,4,5}, {5,6,7,8,9}, {6,5,4,3,2}};
printf("sizeof arr is %d bytes\n", (int)sizeof arr);
printf("number of elements: %d\n", (int)(sizeof arr/sizeof arr[0]));
return 0;
}
int iArray[2][2] = {{1, 2}, {3, 4}};
2D配列は配列の配列と考えてください。
1つの選択肢は、2D配列を1D配列として表すことです。これにより、要素ごとの操作がより効率的になります。おそらく幅と高さも含むクラスでラップする必要があります。
別の方法は、2D配列をstd::vector<std::vector<int> >
として表すことです。これにより、配列演算にSTLのアルゴリズムを使用できるようになり、ベクトルもメモリ管理を処理します。