There are several ways to define a 2D array in C++ and STL without memory manipulation, and the following codes illustrate two different methods:
int main ()
{
you can something like this vector> m_2DArray;
then once you know the number of rows (rows) and number of columns (columns), you can resize your 2d array
m_2DArray.resize(rows);
for(auto& el:m_2DArray) el.resize(columns);
you can access data in the 2d array using m_2DArray[i][j], just like any other 2D array