Как правильнее всего получать столбец матрицы?

Есть объект типа матрица. Сам объект представляет из себя размер матрицы и указатель на указатель на тип int. Если я хочу получить строку, то мне достаточно лишь возвращать в перегруженном операторе указатель из массива указателей, тогда я могу изменять элемент этой матрицы и получать значение, прописав что-то типа matrix[2][3]. Но что, если я захочу получать не строчку, а столбец? Пробовал создавать дополнительный объект внутри класса матрицы, который хранит указатель на матрицу и номер столбца. А потом для этого нового объекта перегружать оператор, чтоб получать элемент этого столбца через указатель на матрицу. Но я думаю, что есть более изящный способ. От туда и вопрос, как?


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

Автор решения: HolyBlackCat

указатель на указатель на тип int

Зря, лучше использовать одномерный массив размера N * M.

Возврату строк это не помешает. Если p - указатель на первый элемент, а w - ширина матрицы, то для i-ой строки возвращать указатель p + w * i.

А чтобы вернуть столбец, достаточно вернуть вспомогательный объект, хранящий q - указатель на первый элемент столбца, и w - ширину матрицы. Тогда, если у этого объекта спросить j-ый элемент столбца, он сможет вернуть q[w * j].

→ Ссылка