[英]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.