如何从二维数组c++; 我在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; } } }

如何从二维数组c++; 我在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; } } },c++,arrays,row,multidimensional-array,sizeof,C++,Arrays,Row,Multidimensional Array,Sizeof,但我只使用普通数组返回长度 如何在不为行和列声明全局变量的情况下执行此操作?首先,从性能方面来说,这样显式分配2D数组不是一个好主意,因为内存不是连续的。最好在一块内存中分配它(除非它太大),并像大多数图像处理库(例如OpenCV)那样抽象2D访问 也就是说,您应该将其包装在一个知道分配大小的类中,然后使用公共方法报告大小。看起来您有一个“Board”对象,所以将“place”及其大小信息存储到该类/结构中 并创建一个sizeof()函数,该函数返回std::pair,如: std::pai

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


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

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

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

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

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

  std::pair<unsigned int, unsigned int> sizeof(const Board& b)
  { return make_pair(b.row(), b.col());}
std::成对尺寸(施工板和b)
{return make_pair(b.row(),b.col());}

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

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

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

查看更多信息


<> > >编辑:我建议你使用<代码>向量,因为你使用C++。

下面可能有帮助:

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;
};
课程板
{
公众:
线路板(int行,int列):行数(行),列数(列){
位置=新整数*[行];
对于(int row=0;row

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

您可以使用1D std::vector并存储列数。参见:使用代码< >向量< /代码>,因为您使用C++。可能您可以将其存储为<代码>成员<代码> <代码>类< /代码>。我们必须使用数组而不是向量D:我知道向量可能。@ SakthiKumar如…我也不想储存它们
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;
};