Список инициализатора для массива
На данный момент у меня есть класс Permutation
, который имеет это:
public:
int elements[N];
Permutation(std::initializer_list<size_t> data): elements(data) {};
Но когда я пытаюсь скомпилировать, я получаю это:
ошибка: инициализатор массива должен быть списком инициализатора
Я чертовски погуглил из списков инициализатора, хотя нет ничего полезного / я мог понять. Так что я не имею ни малейшего представления о том, как использовать списки инициализаторов.
Как мне написать этот конструктор?
ОБНОВИТЬ
У меня также есть эта версия:
public:
int elements[N];
Permutation(std::initializer_list<size_t> data): elements(new int[N]) {
std::copy(data.begin(), data.end(), elements.begin(), elements.end());
}
Я уверен, что это еще более неправильно, но если это поправимо, кто-то может сказать мне, как это сделать?
1 ответ
Решение
Второй подход близок. Это требует незначительных корректировок.
Permutation(std::initializer_list<int> data) : elements{}
{
size_t size = data.size();
if ( size <= N )
{
std::copy(data.begin(), data.end(), std::begin(elements));
}
else
{
std::copy(data.begin(), data.begin()+N, std::begin(elements));
}
}