2015-02-19 2 views
3

При попытке понять связанные списки, я сталкивалась с этим или подобным образом, чтобы построить связанные списки:структура узел против станда :: Список < >

typedef struct node{ 
    int data; 
    node *next; 
}node; 

node* init(int a[], int n){ 
    node *head, *p; 
    for(int i=0; i<n; ++i){ 
     node *nd = new node(); 
     nd->data = a[i]; 
     if(i==0){ 
      head = p = nd; 
      continue; 
     } 
     p->next = nd; 
     p = nd; 
    } 
    return head; 
} 

Но зачем использовать это вместо станд :: списка <. .>?

+0

Почему этот typedef называется 'node' структуры с именем 'node' тоже? – AnArrayOfFunctions

+0

Я голосую, чтобы закрыть этот вопрос, так как нет «правильного» ответа. Я предполагаю, что реализация одноуровневых списков вместо использования 'std :: list' полезна в качестве упражнения и для понимания того, почему определенные алгоритмические сложности в' std :: list' (например, константа вставки, являющаяся линейной), являются так они и есть. Часть 'typedef struct node' выглядит так, как будто это было основано на некотором C-коде. –

+0

В производственном коде нет причин. Это часто учебное упражнение, чтобы узнать, как связанные списки работают под капотом. –

ответ

2

Потому что так оно и работает в С тоже.

Это полезно, когда вы пишете библиотеку, которая может использоваться как с C, так и с C++.

Возможно, также, что код был ранее C, а затем перешел на C++, чтобы использовать некоторые функции C++ в других частях кода.

0

Поскольку вы добавили на вопрос C++, а не C, самый вменяемый ответ на

Но зачем использовать это вместо станд :: список < ..>

является то, что вам не было бы, если бы вы могли использовать стандартную библиотеку и шаблон одноуровневого списка классов std::forward_list. Например, некоторые встроенные среды могут позволить вам использовать C++ и большинство его возможностей, но не всю стандартную библиотеку.

Смежные вопросы