Książka, którą czytam, Introduction to Data Structures with Linked Lists (Presentation 21), zawiera 2 przykłady połączonych list. Oto pierwszy z nich:Nie rozumiem, dlaczego ta funkcja "zwraca wskaźnik z listy"
EnemySpaceShip* getNewEnemy()
{
EnemySpaceShip* p_ship = new EnemySpaceShip;
p_ship->x_coordinate = 0;
p_ship->y_coordinate = 0;
p_ship->weapon_power = 20;
p_ship->p_next_enemy = p_enemies;
p_enemies = p_ship;
return p_ship;
}
Drugi przykład połączonych listach jest to jedno:
EnemySpaceShip* addNewEnemyToList (EnemySpaceShip* p_list)
{
EnemySpaceShip* p_ship = new EnemySpaceShip;
p_ship->x_coordinate = 0;
p_ship->y_coordinate = 0;
p_ship->weapon_power = 20;
p_ship->p_next_enemy = p_list;
return p_ship;
}
Wtedy książka pisze tak:
Zauważ, że ta funkcja różni się od
getNewEnemy
ponieważ zwraca wskaźnik do listy, a nie nowego wroga.
Nie rozumiem, co rozumie przez "drugą funkcję zwraca wskaźnik do listy", a "pierwsza funkcja zwraca nowego wroga". Myślałem, że obaj stworzyli nowego wroga o nazwie p_ship
(który jest zarówno wskaźnikiem, jak i nowym wrogiem) i zwrócili go. Co oznacza to stwierdzenie?
Właściwie można powiedzieć, że obie funkcje zwracają nowo utworzony wróg lub obie funkcje zwracają listę, ponieważ obie funkcje mają kod do utrzymywania połączonej listy. Jedyną różnicą jest źródło nagłówka listy. Implementacja listy jest połączona z jednostką, więc błędem jest wywoływanie wyniku dowolnej funkcji, czystej listy lub "wroga". – Serge
Wygląda na błąd. Ponieważ jest to również bardzo zły przykład pokazujący wszystkie najgorsze praktyki, których możesz używać w C++, prawdopodobnie poleciłbym poszukać bardziej nowoczesnej książki w C++. –
@JanHudec Niestety jest więcej gorszych praktyk niż pokazano w tym przykładzie;) – user463035818