: 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];