编辑:不能使用向量
所以现在我正在用课程和头来练习。我需要做的一件事是创建一个构造函数,该构造函数可以使用初始化程序列表初始化一个2D数组。
我已经用这个网站试着找出了如何做到这一点:列表
但这对我一点帮助都没有。
到目前为止,我已经有了构造函数原型,以及用于初始化器列表的includes和typedef:
#include <initializer_list>
typedef initializer_list<initializer_list<double>> i_list;
Matrix::Matrix(const i_list & list)
{}我需要能够做一些像x = {{1,2},{2,4}}这样的事情,这应该使我能够创建我的矩阵--x--而不必调用我的.at函数。
编辑:
我试着执行以下代码,但遗憾的是,它确实会导致错误。
Matrix::Matrix(const i_list & list)
{
lst.size(list.size());
for (auto const& row: list)
{
(lst.begin(row),lst.end(row));
}
}lst在我的头文件中定义为: I_list lst。I_list,因为它是一个速记。
发布于 2015-09-21 18:15:21
你可以做这样的事
class Matrix
{
public:
Matrix(const i_list& lst)
{
values.reserve(lst.size());
for (auto const& row : lst)
{
values.emplace_back(std::begin(row), std::end(row));
}
}
std::vector<std::vector<double>> values;
};您可以使用std::vector代替原始数组。std::vector的可用构造函数之一采用begin和end迭代器,这些迭代器可用于std::initializer_list。
工作演示
int main()
{
Matrix x = {{1,2},{2,4}};
for (auto const& row : x.values)
{
for (double value : row)
{
std::cout << value << " ";
}
std::cout << std::endl;
}
}输出
1 2
2 4 发布于 2015-09-21 18:25:56
没有理由通过引用康斯特来获取std::initializer_list。无论如何,它都要建好了。而且您实际上不需要构造函数的主体,因为您可以使用std::vector迭代器构造函数。
我简单地建议:
Matrix(std::initializer_list<std::initializer_list<double> > lst)
: values{lst.begin(), lst.end()}
{ }https://stackoverflow.com/questions/32701877
复制相似问题