我试图开发一个不错的基本类Matrix,它的容器是一个更简单的指向data_type(模板参数)的指针;
我想知道如何以这种方式构建我的Matrix:
Matrix<type> mat = { {1,2,3}, {4,5,6} };
现在,使用给定任意数量的参数构造的唯一方法是使用此构造函数:
//--- construct by list of arguments
template<typename data_type>
template <typename ... Ts>
constexpr Matrix<data_type>::Matrix(std::size_t row ,
std::size_t col ,
Ts&&... args ) noexcept : row{row}, columns{col},
data{ new data_type[row*col] }
{
assert(sizeof...(args) == row*columns );
std::initializer_list<data_type> il ( { std::forward<Ts>(args)... } );
std::copy(il.begin(), il.end(), data);
}
但是为了使用它,我必须在用户端代码中使用这个crap表达式:
Matrix<double> m3(3,2,1.12,2.434,3.546546,4.657,5.675675,6.542354);
提前感谢您的宝贵支持!
我已经找到了这个解决方案..但我不知道是否有更好的方法这样做....这里是完整的代码(我写了一个矩阵类,只有这个构造函数按顺序做一些尝试):
# include <iostream>
# include <initializer_list>
# include <iterator>
using namespace std;
template <typename data_type>
class Matrix {
public:
constexpr Matrix(std::initializer_list<std::initializer_list<data_type>> rows) {
size_t row = rows.size() ;
cout << "Here" << endl;
auto il = *(rows.begin());
size_t col = il.size();
cout << row << ' ' << col << endl;
size_t i=0;
size_t n = row * col;
cout << n << endl;;
data = new data_type[ n ];
i=0;
for(auto& row : rows )
for(auto & r : row){
data[i] = r ;
i++;
}
for (i=0; i < n ; i++ )
cout << data[i] << endl;
}
private:
data_type* data;
};
int main(){
Matrix<int> mat = {{1,2,3}, {4,5,6}};
return 0;
}
答案 0 :(得分:0)
这样的事情会起作用吗?
#include <cstddef>
#include <initializer_list>
#include <iostream>
#include <vector>
template<typename data_type>
class Matrix {
public:
constexpr Matrix(std::initializer_list<std::initializer_list<data_type>> rows) {
// Add rows to data
data.reserve(rows.size());
for (auto &row : rows)
data.push_back(std::vector<data_type>{row});
}
private:
// 2-D array-type for storing data
std::vector<std::vector<data_type>> data;
};
int main() {
// New matrix:
// 1 2 3
// 4 5 6
Matrix<int> mat = {{1, 2, 3}, {4, 5, 6}};
return 0;
}