初始化多对象双端队列<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)));