Ввод/вывод массива в одну строку

Изначально задание звучит так: Написать класс булева матрица, реализованная через неупорядоченный список пар (строка, столбец) для ненулевых элементов. Реализовать функции и операции: конъюнкция, дизъюнкция, умножение, итерация, инверсия, транспонирование, доступ к элементам, сравнения, выделение подматрицы. Реализовать итератор для доступа к элементам. Ввод-вывод реализовать в виде [элементы через пробел; элементы через пробел;...]

class Matrix
{
private:
    int** array;
    int size;
public:
Matrix()
    {
        size = 0;
        array = nullptr;
    }
    Matrix(const Matrix& data)
    {
        size = data.size;
        array = new int* [size];
        for (int i = 0; i < size; i++)
        {
            array[i] = new int[2];
        }

        for (int i = 0; i < size; i++)
        {
            for (int j = 0; j < 2; j++)
            {
                array[i][j] = data.array[i][j];
            }
        }
    }
    Matrix operator=(const Matrix& data)
    {
        for (size_t i = 0; i < size; i++)
            delete[] array[i];
        delete[] array;

        size = data.size;
        array = new int* [size];
        for (int i = 0; i < size; i++)
        {
            array[i] = new int[2];
        }

        for (int i = 0; i < size; i++)
        {
            for (int j = 0; j < 2; j++)
            {
                array[i][j] = data.array[i][j];
            }
        }
        return *this;
    }
friend std::ostream& operator<<(std::ostream& out, const Matrix& data)
    {
        for (size_t i = 0; i < data.size; i++)
        {
            for (size_t j = 0; j < 2; j++)
            {
                out << data.array[i][j] << " ";
                
            }
            out << std::endl;
        }
        return out;
    }
    friend std::istream& operator >>(std::istream& in, Matrix& data)
    {
        for (size_t i = 0; i < data.size; i++)
        {
            for (size_t j = 0; j < 2; j++)
            {
                in >> data.array[i][j];
            }
        }
        return in;
    }
};

Никак не получается сделать правильный ввод/вывод. Другие библиотеки, кроме iostream использовать нельзя. Буду благодарен за помощь.

UPD: вывод +- сделал, но надо бы убрать пробелы после ;

    friend std::ostream& operator<<(std::ostream& out, const Matrix& data)
    {
        for (size_t i = 0; i < data.size; i++)
        {
            int c = 1;
            for (size_t j = 0; j < 2; j++)
            {
                out << data.array[i][j];
                
                c++;
                if (c % 3 == 0)
                {
                    std::cout << ";";
                }
                std::cout << " ";
            }
            
        }
        return out;
    }

Ответы (0 шт):