2次元配列を関数に渡したいだけですが、C++はJAVAと似ておらず、その関数として 'int [] [] square'をパラメータとして取り込ませません。どうやら私はそのサイズを指定する必要がありますが、サイズはnからnまでの変数であり、ユーザーが入力します。サイズnの2D int配列をC++の関数にどのように渡しますか?
答えて
使用
vector<vector<int> > a;
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_x
は10
と定義されているため、コンパイラは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;
}
- 1. 動的にサイズの2D配列を関数に渡す
- 2. レンダリングテーブル(2D配列)N * Mサイズ
- 3. 2D配列を関数に渡す
- 4. 2D配列をスレッド関数に渡す
- 5. int配列へのポインタをテンプレート関数に渡します
- 6. 2D int配列をStreamsで2D String配列に変換するにはどうすればよいですか?
- 7. C++関数に配列を渡してから別の関数に渡す
- 8. Ruby:2D配列をどのように印刷しますか?
- 9. 関数にC++配列を渡す
- 10. どのように配列を次のような関数に渡しますか?void fooboo(char array [i]);
- 11. 2D char *配列を関数に渡すときのエラー
- 12. 2d配列をコンストラクタに渡します。
- 13. Cのポインターの2D配列へのポインターを渡します
- 14. 2dのint配列をCのダブルポインタにコピー
- 15. int配列のC++ハッシュ関数
- 16. 配列をC関数に渡すPostgreSQLの集約関数
- 17. どのようにして配列をPerlの関数に渡すことができますか?
- 18. Swift 3 2d Intの配列
- 19. ソートの2D int配列JAVA
- 20. どのようにint配列
- 21. 整数の配列を関数のパラメータとしてCに渡す
- 22. XMLRPC.Net関連する配列をどのように渡しますか?
- 23. int配列へのポインタを引数として渡すC++
- 24. Cython:Pythonから2D配列をCに渡して取得する
- 25. どのようにCで配列 "参照"を渡すには?
- 26. 1D固定配列を2Dポインタ関数に渡す
- 27. C#delegate関数をManaged C++ .Dllにどのように渡すのですか?
- 28. 2d配列の値の円をどのようにループしますか?
- 29. 2次元配列をC++の関数に渡す方法
- 30. 関数から2D配列へのポインタを返す - C++
[決定的なC++ブックガイドとリスト](http://stackoverflow.com/questions/388242/the-definitive-をご覧くださいc-book-guide-and-list)を参照してください。 –
配列はC++で可変サイズを持つことはできません。 'vector'のようなコンテナを使うべきです。 –
ああ、SO C++のドキュメントには、マトリックスクラスがあります:http://stackoverflow.com/documentation/c%2b%2b/3017/arrays/10246/a-dynamic-size-matrix-using-stdvector-for -storage#t = 201702082231137208229)。 –