1
    void printMatrix(int matrix[][], int edge)
{
    int i,j;
    for (i=0; i<edge; ++i) {
        for (j=0; j<edge; ++j) {
        std:cout<<matrix[i][j]<<" ";
        }
        std::cout<<std::endl;
    }
}

Javaでやれば問題ないようですが、C++では、不完全な型へのポインタの添字を示します 'int []'

4

5 に答える 5

2

多次元配列を関数に渡す場合、最初の次元を除くすべての次元を埋める必要があります。それはarr[][X], arr[][X][Y], ...です。

コンパイラは、次元に従って配列の場所を計算する方法を知っています。たとえば、arr[][5]すべての行に 5 つの要素が含まれていることを意味するためarr[2][0]、最初から 10 要素を取ります。したがって、最初の次元は必要ありませんが、他のすべての次元は必要です。

于 2012-12-05T21:28:24.050 に答える
2

1 次元配列を ls として使用します。自分で寸法を計算する

于 2012-12-06T07:37:44.303 に答える
1

生の配列はまったく使用しないでください。std::arrayはるかに優れています。サイズを型の一部にしたくない場合は、 を使用する必要がありますstd::vector。未加工の配列または未加工のポインターを使用する必要がある場合もありますが、これは初心者として心配する必要はありません。

これは、どのように行うかの例です (C++11 のサポートを前提としています)。これは const の正確性と新しい foreach 機能も使用します。正確な構文は覚えていませんが、次のようになります。

void printMatrix(const std::vector<std::vector<int>> matrix)
{
    for(const auto& row : matrix){
        for(int x : row){
            std::cout << x << " ";
        }

        std::cout<<std::endl;
    }
}
于 2012-12-05T21:14:51.663 に答える
0

C++ は配列のサイズや次元数を渡さず、配列の開始アドレス (つまりポインター) のみを渡します。これは、参照付きのテンプレート関数を使用することで回避できます。このようにして、行列のサイズはコンパイル時に認識されます。

template<int X, int Y>
void printMatrix(int (&matrix)[X][Y], int edge)
{
    int i,j;
    for (i=0; i<edge; ++i) {
        for (j=0; j<edge; ++j) {
        std:cout<<matrix[i][j]<<" ";
        }
        std::cout<<std::endl;
    }
}
于 2012-12-05T21:21:25.137 に答える
0

正方行列がある場合は、次の方法で実行できます。

void printMatrix(int matrix[], int edge)
{
    int i,j;
    for (j=0; j<edge; ++j) {
        for (i=0; i<edge; ++i) {
            std:cout << matrix[j*edge + i] << " ";
        }
        std::cout << std::endl;
    }
}

基本的に、行 (または列、それはあなた次第です) を 1D 配列に次々と格納します。内側のループが繰り返されることに注意してくださいj。このようにして、ループはメモリ内の連続するセルにアクセスします。

コードの残りの部分は、同じ規則を使用する必要があります。

ただし、コードに追加するすべてのクラス、テンプレート、デザイン パターンなどに対して報酬が支払われる (またはポイントが与えられる) 場合、このアプローチは最適ではありません。

于 2012-12-05T21:25:03.750 に答える