Инициализация многообъектного deque & lt; vector & lt; vector & lt; float & gt; & GT; & GT;

У меня есть эта структура 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)?

заранее спасибо

1

Решение

Вы не можете создать объект за два прохода: аргументы должны быть переданы конструктору класса, когда объект определен. это работает как шарм (демо):

#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);
}
2

Другие решения

Вы не можете инициализировать переменную после того, как она была определена. Вам нужно либо объединить две имеющиеся у вас строки в одну, либо использовать assign метод deque,

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector