Skrobnąłem na szybko z wykorzystaniem vectora 2d przykład wczytywania macierzy m x n, usuwania kolumny o danym indeksie, wiersza o danym indeksie oraz wyświetlanie samej macierzy.
Oczywiście można to przerobić na wskaźnikach bo teraz przekazywanie do funkcji jest przez wartość i operacje usuwania są robione na kopiach po czym kopia jest zwracana i przypisywana do vectora, choć myślę że tak jest bezpieczniej :)
#include <iostream>
#include <vector>
using namespace std;
vector<vector<int>> wczytaj_macierz();
void wyswietl_macierz(vector<vector<int>> macierz);
vector<vector<int>> usun_kolumne(vector<vector<int>> macierz, int kolumna);
vector<vector<int>> usun_wiersz(vector<vector<int>> macierz, int wiersz);
int main()
{
vector<vector<int>> macierz;
macierz = wczytaj_macierz();
cout<<"Cała macierz:\n";
wyswietl_macierz(macierz);
macierz = usun_kolumne(macierz, 2);
cout<<"Macierz po usunieciu kolumny:\n";
wyswietl_macierz(macierz);
macierz = usun_wiersz(macierz, 2);
cout<<"Macierz po usunieciu wiersza:\n";
wyswietl_macierz(macierz);
return 0;
}
vector<vector<int>> wczytaj_macierz()
{
int m, n;
int tmp;
cout<<"Wpisz rozmiar macierzy (mxn): ";
cin>>m;
cin>>n;
vector<vector<int>> macierz(m, vector<int>(n));
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
cout<<"Podaj kolejny element macierzy: ";
cin>>tmp;
macierz[i][j] = tmp;
}
}
return macierz;
}
void wyswietl_macierz(vector<vector<int>> macierz)
{
for(int i=0;i<macierz.size();i++){
for(int j=0;j<macierz[i].size();j++){
cout<<macierz[i][j]<<" ";
}
cout<<endl;
}
}
vector<vector<int>> usun_kolumne(vector<vector<int>> macierz, int kolumna)
{
for (int i = 0; i < macierz.size(); ++i)
{
if (macierz[i].size() > kolumna)
macierz[i].erase(macierz[i].begin() + kolumna);
}
return macierz;
}
vector<vector<int>> usun_wiersz(vector<vector<int>> macierz, int wiersz)
{
if (macierz.size() > wiersz)
macierz.erase(macierz.begin() + wiersz);
return macierz;
}