簡體   English   中英

如何從2D數組中獲取行和列C ++

[英]How to Get the Rows and Columns from 2d array 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;
        }
    }
}

而且效果很好。 但是現在我想做一個需要數組行和列長度的函數。 我已經嘗試了一些功能:

sizeof()

但是我只使用普通數組來返回長度。

如何在不聲明行和列的全局變量的情況下執行此操作?

首先,就性能而言,像這樣顯式分配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());}

在以這種方式創建2D數組之后, places實際上是一個指向其內容第一行的指針。

指針不存儲任何元數據來指示它們指向的區域的大小; 如果您只有指針,那么就沒有(便攜式)方法來檢索數組中的行數或列數。

您要么需要將信息與指針一起傳遞,要么需要在數組本身中使用標記值(類似於C字符串使用0終止符的方式,盡管這只會給您字符串的邏輯大小,可能小於其占用的陣列的物理大小)。

看看如何獲得雙指針指向的2D數組的大小? 有關更多信息。


編輯:我建議您改用vector<vector<int>>因為您使用的是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;
};

有關大小的信息是實例本身。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM