Я довольно новичок в объектно-ориентированном 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, но все они включали шаблоны, и я еще не изучил это. Если я могу заставить свой конструктор сделать это, возможно ли это сделать без использования шаблонов?
Да, вы можете сделать это (используя 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
,
Если вы этого не понимаете, это, скорее всего, не слишком важно для вашего приложения.
Вам нужен конструктор, который принимает std::initializer_list
, Смотрите пример здесь: http://en.cppreference.com/w/cpp/utility/initializer_list
на самом деле, нет. Я считаю, что объявление списка чисел в фигурных скобках приведет в замешательство компилятор. Лучше объявить массив int и передать его конструктору, который принимает массив int и переменную размера. Учтите следующее:
int aray[] = {5,6,11,22,11};
int size = sizeof(aray)/sizeof(int);
MyList(size,aray);