如何从2d数组c ++获取行和列

时间:2014-02-05 08:16:10

标签: c++ arrays row multidimensional-array sizeof

我用C ++创建了一个2D数组:

Board::Board(int rows, int cols){
    places = new int*[rows];
    for (int row = 0; row < rows; row++){
        places[row] = new int[cols];
        for (int col = 0; col < cols; col++){
            places[row][col] = 0;
        }
    }
}

这很有效。 但是现在我想创建一个需要数组行和列长度的函数。我尝试了一下这个功能:

sizeof()

但我只是使用普通数组来返回长度。

如何在不声明行和列的全局变量的情况下执行此操作?

4 个答案:

答案 0 :(得分:1)

首先,在性能方面明确地分配2D数组并不是一个好主意,因为内存不是连续的。最好将它分配到一块内存中(除非它太大),并像大多数图像处理库那样抽象2D访问(例如OpenCV)。

那就是说,你应该将它包装在一个知道分配大小的类中,然后用公共方法报告大小。

答案 1 :(得分:0)

看起来你有一个“Board”对象,所以将“place”及其大小信息存储到该类/ struct

并创建一个返回std :: pair的sizeof()函数,如:

  std::pair<unsigned int, unsigned int> sizeof(const Board& b)
  { return make_pair(b.row(), b.col());}

答案 2 :(得分:0)

以这种方式创建2D数组后,places实际上是一个指向其内容第一行的指针。

指针不存储任何元数据以指示它们指向的区域的大小;如果只有指针,那么就没有(可移植的)方法来检索数组中的行数或列数。

您将需要将该信息与指针一起传递,或者您需要在数组本身中使用sentinel值(类似于C字符串如何使用0终止符,尽管这只会为您提供逻辑字符串的大小,可能小于它占用的数组的物理大小。

查看How to get size of 2D array pointed by a double pointer?了解详情。


修改:我建议您使用vector<vector<int>>,因为您使用的是C ++。

答案 3 :(得分:0)

以下可能会有所帮助:

class Board
{
public:
    Board(int rows, int cols) : rowCount(rows), columnCount(cols) {
        places = new int*[rows];
        for (int row = 0; row < rows; row++){
            places[row] = new int[cols];
            for (int col = 0; col < cols; col++){
                places[row][col] = 0;
            }
        }
    }
private:
    int** places;
    int rowCount;
    int columnCount;
};

存储大小的信息就是实例本身。