【问题标题】:Initializer list to array初始化列表到数组
【发布时间】:2015-12-10 07:02:19
【问题描述】:

截至目前,我有一个班级Permutation,其中有:

public:
 int elements[N];
 Permutation(std::initializer_list<size_t> data): elements(data) {};

但是当我尝试编译时,我得到了这个:

错误:数组初始化器必须是初始化器列表

我已经用谷歌搜索了初始化列表,尽管没有什么有用的/我能理解的。所以我对如何使用初始化列表一无所知。

如何编写这个构造函数?

更新

我也有这个版本:

public:
 int elements[N];
 Permutation(std::initializer_list<size_t> data): elements(new int[N]) {
     std::copy(data.begin(), data.end(), elements.begin(), elements.end());
 }

我很确定它更错了,但如果可以修复,有人可以告诉我该怎么做吗?

【问题讨论】:

  • {1, 2, 3} 这样的初始化列表不应与std::initializer_list 混淆。 IMO 标准委员会真的搞砸了。
  • std::vector 支持从 std::initializer_list 参数初始化。
  • @JoachimPileborg 所以你是说如果我想做这样的事情就不需要它Permutation&lt;3&gt; tau {0, 2, 1};
  • @M.M:不,std::array 不支持std::initializer_list
  • 我是说你不能使用std::initializer_list来初始化一个数组,你需要在构造函数体中使用一个循环来从std::initializer_list初始化数组中的每个元素。哦,当你有一个int 数组时,为什么你有一个std::initializer_list&lt;size_t&gt;?不应该是std::initializer_list&lt;int&gt;吗?

标签: c++ arrays class constructor initializer-list


【解决方案1】:

第二种方法很接近。它需要稍作调整。

Permutation(std::initializer_list<int> data) : elements{}
{
   size_t size = data.size();
   if ( size <= N )
   {
      std::copy(data.begin(), data.end(), std::begin(elements));
   }
   else
   {
      std::copy(data.begin(), data.begin()+N, std::begin(elements));
   }
}

【讨论】:

  • 可能它应该检查我们没有注销elements的结尾;如果列表太短,还会对未使用的元素进行值初始化。
  • @M.M 这个我自己搞定;我只需要了解语法和基础知识
  • 感谢您的回答!我会试试这个;如果一切顺利,我会接受这个
猜你喜欢
  • 2011-06-05
  • 2023-03-13
  • 1970-01-01
  • 2016-03-08
  • 1970-01-01
  • 2015-02-07
  • 1970-01-01
  • 2014-10-09
  • 1970-01-01
相关资源
最近更新 更多