@RichUncle

Как узнать размер массива созданного через указатели?

#include <iostream>

int** create_matrix(unsigned int size)
{
	int** matrix = new int*[size];
	for (int i = 0; i < size; i++)
	{
		matrix[i] = new int[size];
	}

	for (int x = 0; x < size; x++)
	{
		for (int y = 0; y < size; y++)
		{
			matrix[x][y] = rand() % 10000 - rand() % 10;
		}
	}

	return matrix;
}


int main() 
{
	int** matrix = create_matrix(5);
}
  • Вопрос задан
  • 119 просмотров
Решения вопроса 1
@vanyamba-electronics
В С++ это делается иначе.
#include <iostream>
#include <vector>

template <typename T>
class Matrix
{
protected:
    class Row: public std::vector<T>
    {
    public:
        Row(int size = 0) :
            std::vector<T>(size)
        {
        }
        int dataSize() const {
            return sizeof(T) * this->size();
        }
    };
    
    std::vector<Row> m_rows;
    
    typedef typename std::vector<Row>::iterator iterator;
    typedef typename std::vector<Row>::const_iterator const_iterator;
public:
    Matrix(int rows, int columns = -1) :
        m_rows(rows)
    {
        if (columns == -1)
           columns = rows;
        for(iterator it = m_rows.begin(); it != m_rows.end(); it++) {
           it->resize(columns);
        }
    }
    int dataSize() const {
        return m_rows.dataSize() * m_rows.size();
    }
};

typedef Matrix<int> IntMatrix;

int main()
{
    IntMatrix m(5);
    std::cout << m.dataSize() << std::endl;
    
    return 0;
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы