2017-02-08 3 views
-3

2次元配列を関数に渡したいだけですが、C++はJAVAと似ておらず、その関数として 'int [] [] square'をパラメータとして取り込ませません。どうやら私はそのサイズを指定する必要がありますが、サイズはnからnまでの変数であり、ユーザーが入力します。サイズnの2D int配列をC++の関数にどのように渡しますか?

+1

[決定的なC++ブックガイドとリスト](http://stackoverflow.com/questions/388242/the-definitive-をご覧くださいc-book-guide-and-list)を参照してください。 –

+1

配列はC++で可変サイズを持つことはできません。 'vector'のようなコンテナを使うべきです。 –

+0

ああ、SO C++のドキュメントには、マトリックスクラスがあります:http://stackoverflow.com/documentation/c%2b%2b/3017/arrays/10246/a-dynamic-size-matrix-using-stdvector-for -storage#t = 201702082231137208229)。 –

答えて

1

使用

vector<vector<int> > a; 
0

C++は、すべての次元で可変サイズの2次元配列型をサポートしていません。関数パラメータint arr[]、またはint twoD[][10]のようなパラメータを定義することもできますが、int twoD[][]のようなパラメータはサポートされていません。

(、私は実際にそれを使用することを奨励していませんし、それだけで説明目的のためだエラーが発生しやすく、ハックである)私は周りの仕事を使用してその理由を説明してみましょう:

関数はパラメータを取りこれは整数へのポインタであり、dimension_xは実際には1行あたりの整数の数を表します。次に、 "row_number * dimension_x + column_number"(行番号と列番号は0 -indexed)を取って、セルのアドレスを計算するという点で、整数の2次元配列へのポインタとして整数へのポインタを「扱う」ことができます。 。

"row_number * dimension_x + column_number"という式に注意してください。セルの位置を計算するには "dimension_x"が必要です。同じ理由から、dimension_x10と定義されているため、コンパイラはtwoD[][10]型のパラメータを処理できます。対照的に、タイプtwoD[][]のパラメータは処理できません。これは、コンパイラが "dimension_x"を導出できず、結果として、たとえばtwoD[2][1]のような要素にアクセスする場所を判断できないためです。

void func(int* startOf2DArray, int dimension) { 
    int row = 2; 
    int column = 1; 
    int cellAtRow_Column = startOf2DArray[dimension*row + column]; 
    printf("value at [%d][%d] is %d (should be 7)\n", row, column, cellAtRow_Column); 
} 

int main(void) 
{ 
    int dimension = 3; 
    int myArray[3][3] = { {0,1,2},{3,4,5},{6,7,8} }; 
    func (&myArray[0][0], dimension); 
    return 0; 
} 

Puh;長い説明;それが少し問題を説明してくれることを願っています。

のでvector<vector<int> > &my2DArrayAsRef(あるいはvector<vector<int> > my2DArrayAsCopy)を使用します。

void func2(std::vector<std::vector<int>> &my2DArrayAsRef) { 

    int row = 2; 
    int column = 1; 
    int cellAtRow_Column = my2DArrayAsRef[row][column]; 
    printf("value at [%d][%d] is %d (should be 7)\n", row, column, cellAtRow_Column); 
} 

int main(void) 
{ 
    std::vector<std::vector<int>> myArray2 = { {0,1,2},{3,4,5},{6,7,8} }; 
    func2(myArray2); 
    return 0; 
} 
関連する問題