Могу ли я создать связанный список с помощью фигурных скобок?

Я довольно новичок в объектно-ориентированном C ++ и пытаюсь создать конструктор для связанного списка следующим образом:

Где-то в List.h у нас будет это:

struct Node
{
int data;
Node *next;
};

а затем в main.cpp я хотел бы иметь возможность создать список следующим образом:

int main()
{
List A({1,2,3,4,5,6});// I want the amount of numbers to indicate the size of
//the list and the numbers to go into each node in order
return 0;
}

Итак, мой вопрос, могу ли я сделать такой конструктор? Если так, то как? Должен ли я использовать шаблоны, чтобы сделать это? Я пытался найти ответ на этот вопрос в SO, но все они включали шаблоны, и я еще не изучил это. Если я могу заставить свой конструктор сделать это, возможно ли это сделать без использования шаблонов?

5

Решение

Да, вы можете сделать это (используя C ++ 11).

Вам нужно определить конструктор, принимая std::initializer_list<int>,
(Да, это шаблон, но я покажу вам, как его использовать. :-))

Возможная реализация std::intitializer_list<int>-конструктор может выглядеть так:

//in class List:
List (std::initializer_list<int> init) {
for (auto v : init)
this->emplace_back(v);
}

где вы должны реализовать emplace_back себя как упражнение. emplace_back должен построить новый Node и добавить его в List, Это будет полезная функция-член (обещаю).

Вероятно, неважное уведомление:
Если emplace_back делает выделения кучи, этот код может просочиться. В этом случае делегируйте конструктору, который помещает List в правильное состояние, поэтому деструктор может освободить все выделенные кучи Nodes,
Если вы этого не понимаете, это, скорее всего, не слишком важно для вашего приложения.

2

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

Вам нужен конструктор, который принимает std::initializer_list, Смотрите пример здесь: http://en.cppreference.com/w/cpp/utility/initializer_list

0

на самом деле, нет. Я считаю, что объявление списка чисел в фигурных скобках приведет в замешательство компилятор. Лучше объявить массив int и передать его конструктору, который принимает массив int и переменную размера. Учтите следующее:

int aray[] = {5,6,11,22,11};
int size   = sizeof(aray)/sizeof(int);

MyList(size,aray);
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector