Разработать класс двумерной таблицы

Дано задание: Реализовать класс двумерной таблицы с возможностью получения значений отдельных элементов, вывода всех значений, сортировки значений в пределах указанной строки или столбца.Подскажите, пожалуйста, алгоритм решения данного задания. С чего и как правильно начать? Может, у кого-то есть подобные примеры?
1 ответ

#include <iostream>
#include <stdlib.h>
 
using namespace std;
 
 
class matrix
{
public:
    int **a;
    int columns;
    int lines;
 
public:
    matrix()
    {
        a=NULL;
        columns=0;
        lines=0;
    }
 
    matrix(const matrix &obj)
    {
        columns=obj.columns;
        lines=obj.lines;
        a=new int*[lines];
        for(int i=0;i<lines;i++)
        {
            a[i]=new int[columns];
            for(int j=0;j<columns;j++)
            {
                a[i][j]=obj.a[i][j];
            }
        }
    }
    friend  istream &operator >>(istream &in,matrix &obj);
    friend  ostream &operator <<(ostream &out,matrix &obj);
};
 
istream &operator >>(istream &in,matrix &obj)
{
    cout<<"Введите данные"<<endl;
    cout<<"Введите число столбцов: ";
    cin>>obj.columns;
    cout<<"Введите число линий: ";
    cin>>obj.lines;
    obj.a=new int*[obj.lines];
    for(int i=0;i<obj.lines;i++)
    {
        obj.a[i]=new int[obj.columns];
        for(int j=0;j<obj.columns;j++)
        {
            cout<<"a["<<i+1<<"]["<<j+1<<"]=";
            in>>obj.a[i][j];
        }
    }
    return in;
}
 
ostream &operator <<(ostream &out,matrix &obj)
{
 
    cout<<"Вывод данных"<<endl;
    for(int i=0;i<obj.lines;i++)
    {
        for(int j=0;j<obj.columns;j++)
        {
            out<<"a["<<i+1<<"]["<<j+1<<"]="<<obj.a[i][j]<<" ";
        }
        out<<endl;
    }
    return out;
}
 
int main()
{
    matrix m;
    int i,j,l,c;
    char com,com1;
    bool swapped = true;
    int j1=0,tmp;
    cin>>m;
 
    while (1)
    {
        cout<<"[1] Вывод отдельного элемента"<<endl;
        cout<<"[2] Вывод всех значений"<<endl;
        cout<<"[3] Сортировка в пределах столбца или строки"<<endl;
        cout<<"[0] Выход из программы"<<endl;
        cout<<"Command < < < ";
        cin>>com;
        cout<<endl;
        switch(com)
        {
        case '0':
            exit(0);
            break;
        case '1':
            cout<<"Введите координаты элемента"<<endl;
            cout<<"строку i=";
            cin>>i;
            cout<<"столбец j=";
            cin>>j;
            cout<<"Искомый элемент "<<m.a[i-1][j-1]<<endl;
            break;
        case '2':
            cout<<m;
            break;
        case '3':
            cout<<"Выберите сортировку"<<endl;
            cout<<"[1] Линии"<<endl;
            cout<<"[2] Столбца"<<endl;
            cout<<"Command < < < ";
            cin>>com1;
            switch (com1)
            {
            case '1':
                cout<<"Введите линию ";
                cin>>l;
                while(swapped)
                {
                    swapped=false;
                    j1++;
                    for(int i=0;i<m.columns-j1;i++)
                    {
                        if(m.a[l-1][i]>m.a[l-1][i+1])
                        {
                            tmp=m.a[l-1][i];
                            m.a[l-1][i]=m.a[l-1][i+1];
                            m.a[l-1][i+1]=tmp;
                            swapped=true;
                        }
                    }
                }
                break;
            case '2':
                cout<<"Введите столбец ";
                cin>>c;
                while(swapped)
                {
                    swapped=false;
                    j1++;
                    for(int i=0;i<m.lines-j1;i++)
                    {
                        if(m.a[i][c-1]>m.a[i+1][c-1])
                        {
                            tmp=m.a[i][c-1];
                            m.a[i][c-1]=m.a[i+1][c-1];
                            m.a[i+1][c-1]=tmp;
                            swapped=true;
                        }
                    }
                }
                break;
            default:
                cout<<"Неверная команда"<<endl;
                break;
            }
            break;
        default:
            cout<<"Неверная команда"<<endl;
            break;
        }
    }
 
    return 0;
}