考慮類型2數組聲明的:用x在內存中設置的2d數組與模擬2d數組的1d數組連續相似嗎?
T x [rows * cols]; // type 1
T y [rows][cols]; // type 2
我通常使用第一類型(類型1)其中,然後我知道到索引[行* COLS + COL]
然而,如果我想將2d數組複製到模擬2d數組的1d數組中,例如:copy type2 - > type1。如果這些內容保證在內存中以相同的方式佈置,我可以只對另一個執行一個memcpy?目前我有一個循環,但如果內存是相同的佈局,我想我可以只做一個memcpy。考慮下面的公共構造函數。
public:
// construct a matrix from a 2d array
template <unsigned int N, unsigned int M>
Matrix (T (&twoDArray)[N][M] ) : rows_(N), cols_(M), matrixData_(new T[rows_*cols_])
{
// is there a refactor here? Maybe to memcpy?
for (unsigned int i = 0; i < rows_ ; ++i)
{
for (unsigned int j = 0; j < cols_ ; ++j)
{
matrixData_[ i * cols_ + j ] = twoDArray[i][j];
}
}
}
private:
unsigned int rows_;
unsigned int cols_;
T* matrixData_;
「類型2」甚至不是合法的C++。 –
你想要: 'T ** y = new T * [row]; // type 2' – smac89
@ Smac89:沒人願意。 –