初始化多对象双端队列<vector<vector<float> >>
Initializing a multiobject deque<vector<vector<float> > >
我有这个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)
?
的规范吗?
提前致谢
您不能分两次构造对象:必须在定义对象时将参数提供给 class 构造函数。这个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);
}
不能在定义变量后对其进行初始化。您需要将您拥有的两行合并为一条,或者使用 deque
.
的 assign
方法
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)));
我有这个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)
?
提前致谢
您不能分两次构造对象:必须在定义对象时将参数提供给 class 构造函数。这个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);
}
不能在定义变量后对其进行初始化。您需要将您拥有的两行合并为一条,或者使用 deque
.
assign
方法
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)));