我有这个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)
?
提前致谢
答案 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);
}