初始化多对象deque <vector <vector <float>&gt; &GT;

时间:2017-08-08 13:57:42

标签: c++ vector initialization deque complextype

我有这个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<float>(5,0.0f)

的规范

提前致谢

2 个答案:

答案 0 :(得分:3)

在定义变量后,您无法初始化变量。您需要将两条线合并为一条,或使用assign的{​​{1}}方法。

deque

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

答案 1 :(得分:2)

您无法在两次传递中构造对象:在定义对象时,必须将参数赋予类构造函数。这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);
}