: n * m
, 2d.
... ...
, vector
API , , vector
- ( &vec[0]
vec.data()
, , ).
++, , n * m
class
, 2- , .
:
class array_2d
{
public:
array_2d( std::size_t rows, std::size_t columns )
: m_rows(rows), m_cols(columns), m_array( new char[rows * columns] )
{
}
~array_2d()
{
delete [] m_array;
}
T& operator()( std::ptrdiff_t row, std::ptrdiff_t col )
{
return m_array[row * m_cols + col];
}
char* data()
{
return m_array;
}
private:
char* m_array;
std::size_t m_rows;
std::size_t m_cols;
};
( char*
std::unique_ptr<char[]>
std::vector<char>
, , , vector
, )
(operator()
) - , at(...)
; . :
auto array = array_2d(5,5);
auto& i01 = array(0,1);
, [][]
, 2d- ( (r,c)
), - operator []
(untested):
class array_2d_proxy
{
public:
array_2d_proxy( char* p ) : m_entry(p){}
char& operator[]( std::ptrdiff_t col ){ return m_entry[col]; }
private:
char* m_entry;
};
class array_2d
{
...
array_2d_proxy operator[]( std::ptrdiff_t row )
{
return array_2d_proxy( m_array + (row * m_cols) );
}
...
};
"" 2d-, :
auto& i00 = array[0][0];