首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用减肥剂列表?

如何使用减肥剂列表?
EN

Stack Overflow用户
提问于 2015-09-21 18:08:16
回答 2查看 467关注 0票数 2

编辑:不能使用向量

所以现在我正在用课程和头来练习。我需要做的一件事是创建一个构造函数,该构造函数可以使用初始化程序列表初始化一个2D数组。

我已经用这个网站试着找出了如何做到这一点:列表

但这对我一点帮助都没有。

到目前为止,我已经有了构造函数原型,以及用于初始化器列表的includes和typedef:

代码语言:javascript
复制
#include <initializer_list>
typedef initializer_list<initializer_list<double>> i_list;

Matrix::Matrix(const i_list & list)
{}

我需要能够做一些像x = {{1,2},{2,4}}这样的事情,这应该使我能够创建我的矩阵--x--而不必调用我的.at函数。

编辑:

我试着执行以下代码,但遗憾的是,它确实会导致错误。

代码语言:javascript
复制
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,因为它是一个速记。

EN

回答 2

Stack Overflow用户

发布于 2015-09-21 18:15:21

你可以做这样的事

代码语言:javascript
复制
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的可用构造函数之一采用beginend迭代器,这些迭代器可用于std::initializer_list

工作演示

代码语言:javascript
复制
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;
    }
}

输出

代码语言:javascript
复制
1 2 
2 4 
票数 3
EN

Stack Overflow用户

发布于 2015-09-21 18:25:56

没有理由通过引用康斯特来获取std::initializer_list。无论如何,它都要建好了。而且您实际上不需要构造函数的主体,因为您可以使用std::vector迭代器构造函数。

我简单地建议:

代码语言:javascript
复制
Matrix(std::initializer_list<std::initializer_list<double> > lst)
: values{lst.begin(), lst.end()}
{ }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32701877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档