Динамический двумерный массив, реализован в классе как указатель на массив указателей на строки. Подразумевается создание нового экземляра класса - результирующего массива с занесением значений предыдущего массива и вставленной строкой. Примерно так. class Matrix { int n; int **m; public: Matrix(int); ...... ~Matrix(); }; Matrix::Matrix(int size) { n = size; m = new int*[n]; for (int i = 0; i < n; i++) m[i] = new int[n]; }
a[0]=string0 a[1]=string1 ... a[k]=stringk a[k+1]=string(k+1) ... a[n]=stringn где string это однотипный массив
Задача вставки a[new] между a[k] и a[k+1] заключается в передвижении всех ссылок с a[k+1](включительно) вперед, предварительно выделив для а места на один эл больше. А потом просто a[k+1] = string(new) ,
Для нового объекта передвигать ничего не нужно. При создании учесть новую строку и все.
Со столбцом почти аналогично. Только проход будет по элементу строк. Также реалоцируешь(а для нового экз класса просто к неью плюсуешь один) и пихаешь с учетом столбца.
Если операции удаления\вставки строк и столбцов оч частые нужно подумать о оптимизации.