Я пишу класс манипуляции матрицей в C++ в качестве проекта курса. Я хочу, чтобы синтаксис был как можно ближе к MATLAB. Я хотел бы реализовать конструктор для матрицы, которая позволяет мне сделать что-то вроде того, что показано ниже:Контрактор для матричного класса в C++
Matrix X(3,3) = {1, 2, 3, 4, 5, 6, 7, 8, 9};
// [1 2 3]
// X = [4 5 6]
// [7 8 9]
Я попытался с помощью initializer_list
конструктор, но это только позволяет мне делать:
Matrix X(3,3,{1, 2, 3, 4, 5, 6, 7, 8, 9});
Вот мой код для этого конструктора:
Matrix::Matrix(size_t row, size_t col) : nrow(row), ncol(col), len(row*col) {
mat = std::unique_ptr<double[]>(new double[len]);
}
void Matrix::operator= (std::initializer_list<double> list) {
if (list.size() != len)
throw std::length_error("Sizes of matrix and initializer list do not match");
auto it = list.begin();
for (int i = 0; it != list.end(); ++i, ++it)
mat[i] = *it;
}
Matrix::Matrix(size_t row, size_t col, std::initializer_list<double> list) : Matrix::Matrix(row, col) {
*this = list;
}
Мне нужны предложения о том, как реализовать первый.
Почему бы не использовать 'std :: vector' вместо 'std :: unique_ptr '? –
NathanOliver
@NathanOliver Возможно, я ошибаюсь, но я думаю, что массивы быстрее и легче по сравнению с векторами. –
Производительность 'std :: vector' должна быть такой же быстрой. У вас все еще есть распределение памяти в обоих случаях, а затем скорость доступа должна быть одинаковой. – NathanOliver