#cpp #массивы #классы #указатели #список
Пытаюсь создать свой list из array есть структура templatestruct Node { T data; Node* next; }; собственно функция template Node * arrayToList(const T tab[], size_t size){ Node *node = new Node ; for(int i=0;i data = tab[i]; node->next = new Node ; } } в main int tabi[] = {2,1,4,3,6,5,7,8}; size_t sizei = sizeof(tabi)/sizeof(tabi[0]); Node *listAi = arrayToList(tabi,sizei); так вот проблема в том что не могу править созданный экземпляр Node тут node->next = new Node ; я создаю экземпляр , а как в него значение из массива занести ?
Ответы
Ответ 1
Не понятно, в чем состоит ваша проблема Поэтому я предложу код, который позволяет заполнить список элементами массива. Надеюсь, что если это не то, что вам нужно, то вы об этом сообщите мне в своем комментарии к ответу. Вот демонстрационная программа #includetemplate struct Node { T data; Node *next; }; template Node * arrayToList( const T a[], size_t n ) { Node *head = nullptr; Node **current = &head; for ( size_t i = 0; i < n; i++, current = &( *current )->next ) { *current = new Node { a[i], nullptr }; } return head; } template void displayList( Node *head ) { for ( ; head; head = head->next ) std::cout << head->data << ' '; } int main() { int a[] = { 2, 1, 4, 3, 6, 5, 7, 8 }; const size_t N = sizeof( a ) / sizeof( *a ); for ( int x : a ) std::cout << x << ' '; std::cout << std::endl; Node *list = arrayToList( a, N ); displayList( list ); std::cout << std::endl; } Ее вывод на консоль: 2 1 4 3 6 5 7 8 2 1 4 3 6 5 7 8 Если ваш компилятор не поддерживает список инициализации для оператора new, то предложение *current = new Node { a[i], nullptr }; вы можете заменить на следующие предложения *current = new Node ; ( *current )->data = a[i]; ( *current )->next = nullptr; Либо вы можете написать для класса Node конструктор, чтобы можно было бы опять записать все в одну строчку, как, например *current = new Node ( a[i], nullptr );
Комментариев нет:
Отправить комментарий