【问题标题】:Initializing a multiobject deque<vector<vector<float> > >初始化多对象双端队列<vector<vector<float> >
【发布时间】:2018-01-16 03:29:06
【问题描述】:

我有这个 c++ 结构

std::deque<vector<vector<float> > > mydeque;

我想用下面的代码行初始化:

mydeque(10, vector<vector<float> >(20,vector<float>(5,0.0f)));

创建一个包含 10 个向量的双端队列,每个向量包含 20 个元素,这些元素是长度为 5 且值为 0.0f 的向量。

我有这个错误:

error: no match for call to ‘(std::deque<std::vector<std::vector<float> > >) (int, std::vector<std::vector<float> >)’

你知道如何解决这个问题,因为我不明白这个错误吗? 另外,我可以跳过一些初始化的深度,比如vector&lt;float&gt;(5,0.0f)的规范吗?

提前致谢

【问题讨论】:

  • 您是否尝试在构造函数中执行此操作?

标签: c++ vector initialization deque complextype


【解决方案1】:

你不能在两遍中构造一个对象:参数必须在定义对象时提供给类构造函数。这个works like a charm (demo)

#include <iostream>
#include <vector>
#include <deque>

int main()
{
    std::deque<std::vector<std::vector<float>>> mydeque(10, std::vector<std::vector<float>>(20, std::vector<float>(5, .0f)));
}

或者,您可以定义一个自定义构造函数来帮助提高可读性:

template<typename T>
struct MyDeque : std::deque<std::vector<std::vector<T>>>
{
    MyDeque(size_t d1, size_t d2, size_t d3, const T& value = T())
        : std::deque<std::vector<std::vector<T>>>(d1, std::vector<std::vector<T>>(d2, std::vector<T>(d3, value)))
    {}
};

int main()
{
    MyDeque<float> mydeque(10, 20, 5, .0f);
}

【讨论】:

    【解决方案2】:

    你不能在定义变量后对其进行初始化。您需要将您拥有的两条线合二为一,或者使用dequeassign 方法。

    std::deque<vector<vector<float>>> mydeque(10, vector<vector<float>>(20, vector<float>(5,0.0f)));
    

    mydeque.assign(10, vector<vector<float>>(20, vector<float>(5,0.0f)));
    

    【讨论】:

      猜你喜欢
      • 2013-06-06
      • 1970-01-01
      • 2021-01-26
      • 2014-07-28
      • 2015-05-22
      • 2013-07-13
      • 2012-06-09
      • 1970-01-01
      • 2012-08-07
      相关资源
      最近更新 更多