2017-08-08 65 views
1

我有这样的C++结构初始化多对象双端队列<矢量<矢量<float>>>

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

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

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

创建的一个双端队列每个矢量具有20个元素,这些元素是具有0.0f值的长度为5的矢量。

我有这样的错误:

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

你知道如何解决这个问题,因为我不理解的错误? 此外,我可以跳过一些深度的初始化,如vector<float>(5,0.0f)的规范?提前

+0

你们是不是要做到这一点在构造函数? – Simple

回答

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); 
} 
3

它已被定义后,您不能初始化变量。您需要将两条线组合成一条线,或者使用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))); 
相关问题