【问题标题】:Call non-default constructor for object in vector initialization在向量初始化中为对象调用非默认构造函数
【发布时间】:2011-05-15 02:48:24
【问题描述】:

我想在构造函数的初始化列表中初始化一个向量。向量由带有参数化构造函数的对象组成。我所拥有的是:

Class::Class() : 
   raster_(std::vector< std::vector<Cell> > (60, std::vector<Cell>(80)))
{
...

如何在上面的行中使用两个参数调用 Cell::Cell?显而易见的:

raster_(std::vector< std::vector<Cell(true,true)> > (60, std::vector<Cell(true,true)>(80)))

没用。

【问题讨论】:

  • 彻底糊涂了。发布 ClassCell 的声明

标签: c++ constructor vector initialization parameter-passing


【解决方案1】:

:raster_(std::vector&lt; std::vector&lt;Cell&gt; &gt; (60, std::vector&lt;Cell&gt;(80, Cell(true, true))));

如果 raster_ 是采用矢量的东西。如果 raster_ 本身就是向量那么像这样

:raster(60, std::vector&lt;Cell&gt;(80, Cell(true, true)))

【讨论】:

    【解决方案2】:

    你应该试试:

    Class::Class() : 
         raster_(60, std::vector<Cell>(80, Cell(true, true)))
    {
        /* ... */
    }
    

    请注意,我从初始化程序中删除了无用的std::vector&lt;std::vector&lt;Cell&gt; &gt;。另请注意,这可能非常无效,具体取决于复制Cell 的成本:

    • 它通过复制提供的值Cell(true, true) 80 倍来创建一个std::vector&lt;Cell&gt;
    • 它通过复制 60 倍提供的向量(它本身包含 80 个元素)来创建一个 std::vector&lt;std::vector&lt;Cell&gt; &gt;

    【讨论】:

    • 哦,我不知道我可以省略类型。你说它非常无效。那我应该如何初始化数组呢?
    • @problemofficer:我想只要Cell 复制成本低就可以了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    • 2012-01-02
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2011-08-09
    • 2011-06-12
    相关资源
    最近更新 更多