Список инициализатора для массива

На данный момент у меня есть класс 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));
   }
}
Другие вопросы по тегам