Шаблон проектирования итератора для двумерного вектора c ++, OOP - PullRequest
1 голос
/ 28 мая 2020

Я новичок в C ++. В своей программе я создал матрицу и написал забавную c для работы с ее столбцами и строками. Вместо счетчиков i и j я хочу реализовать шаблон проектирования итератора. Не нашел здесь подходящей информации. Не могли бы вы помочь мне с этой задачей? Вот мой код:

#include <iostream>
#include <iomanip> 
#include <vector>

using namespace std;
#define C 5

template <class T>
class myMatrix
{
private:
    int col, row;
    vector<vector<T>> matrix;
public:
    myMatrix(int a, int b)
    {
        col = b;
        row = a;
        matrix.assign(a, vector<T>(b));
    }
    void copy_row(int numb);
    void copy_col(int numb);
    void input();
    void output();

    ~myMatrix() { }
};

template <class T>
void myMatrix<T>::copy_row(int numb)
{
    for (int i = 0; i < col; i++) 
        cout << matrix[numb][i] << " ";
}

template <class T>
void myMatrix<T>::copy_col(int numb)
{
    for (int i = 0; i < row; i++) 
        cout << matrix[i][numb] << endl;
}

template <class T>
void myMatrix<T>::input()
{
    for (int i = 0; i < row; i++)
        for (int j = 0; j < col; j++)
        {
            T number;
            cin >> matrix[i][j];
        }
}

template <class T>
void myMatrix<T>::output()
{
    for (int i = 0; i < row; i++)
    {
        for (int j = 0; j < col; j++)
            cout << setw(10) << left << matrix[i][j];
        cout << endl;
    }
    cout << endl;
}

int main()
{
    int a, b;
    myMatrix<int> matrix1(5, 5);

    cout << "Put in the matrix 5x5: " << endl;
    matrix1.input();

    cout << endl;
    matrix1.output();

    cout << "Put the column number to copy: ";
    cin >> a;
    cout << endl;
    matrix1.copy_col(a - 1);
    cout << endl;

    cout << "Put the row number to copy: ";
    cin >> b;
    cout << endl;
    matrix1.copy_row(b - 1);
    cout << endl;

    return 0;
}
...