2016-05-17 2 views
1

В Java ссылка может быть инициализирована нулем. Однако в C++ это вызовет проблему. Поэтому не уверен, как использовать ссылку только для реализации связанного списка.Как реализовать связанный список в ссылке без использования указателя

+5

Вы не можете. Используйте указатели. –

+0

@lightrek Считаете ли вы использование интеллектуальных указателей. Как unique_ptr? – bashrc

+0

Возможный дубликат [Является ли реализация Linked-List без использования указателей или нет?] (Http://stackoverflow.com/questions/3002764/is-a-linked-list-implementation-without-using-pointers-possible- or-not) – drorco

ответ

2

Я не знаю, насколько полезно это понятие, но вы можете сделать это с помощью std::reference_wrapper, следующим образом:

#include <iostream> 
#include <list> 
#include <functional> 
using namespace std; 

int main() { 
    int a = 2, b = 6, c = 1; 

    list<reference_wrapper<int>> mylist; 
    mylist.push_back(a); 
    mylist.push_back(b); 
    mylist.push_back(c); 

    for(auto x : mylist) { 
     cout << x << " "; 
    } 
    cout << endl; 
    a = 3; // <- this setting will modify mylist! 

    for(auto x : mylist) { 
     cout << x << " "; 
    } 
    return 0; 
} 

Я бы порекомендовал обучения C++ способы обработки вещей, особенно, что вы едете из Java мира , Demo!

+0

Хотя ваш ответ правильный. Это может быть непонятно ОП, который не хорошо осведомлен о указателях/ссылках на C++. Не обижайся никому! – Ajay

+0

@ Ajay Я согласен. Но я просто хотел показать возможности :) –

2

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

Ваше единственное решение (поскольку вы новичок в C++) заключается в использовании указателей, подобных этому.

struct Node{ 
    int value; 
    Node* next; 
} 

Таким образом, вы можете оставить указатель, называемый далее нулевым, и это означало бы конец связанного списка.

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