如何处理二维数组

时间:2012-12-05 21:12:33

标签: c++

    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 []'

的指针的下标

5 个答案:

答案 0 :(得分:2)

将多维数组传递给函数时,必须填写所有尺寸,第一个除外。那是arr[][X], arr[][X][Y], ...

编译器知道如何根据维度进行数组位置数学运算。例如,arr[][5]表示每行包含5个元素,因此arr[2][0]将从一开始就获取10个元素。所以第一个维度不是必需的,而是所有其他维度 - 都是。

答案 1 :(得分:2)

使用一维数组作为列表。 并自己计算尺寸

答案 2 :(得分: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;
    }
}

答案 3 :(得分: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;
    }
}

答案 4 :(得分: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;
    }
}

基本上,在一维数组中一个接一个地存储行(或列,由你决定)。 请注意,内部循环遍历j - 这样循环访问内存中的连续单元格。

然后您的其余代码应使用相同的约定。

如果您为代码中添加的每个类,模板,设计模式等付费(或给定积分),这种方法并不是最好的方法。