Słowo kluczowe auto dobiera do zmiennej odpowiedni typ. Warunkiem użycia auto jest inicjalizacja takiej zmiennej. Nie można zrobić tak:
auto n;
n = 5;
Ale można tak:
auto n = 5;
Zmienna "n" będzie typu int. A to dlatego, że liczba "5" w C++ to tzw. stała dosłowna będąca typem int. Jeśli chciałbyś zrobić zmienną typu long, to zapiszesz tak:
auto n = 5L;
A jeśli chcesz utworzyć zmienną unsigned long long int, to piszesz tak:
auto n = 5uLL;
Inne przykłady:
auto a = 5; // int
auto b = 5L; // long
auto c = 5u; // unsigned int
auto d = 5.0; // double
auto e = 5.0f; // float
auto f = 5.0L; // long double
auto g = 'a'; // char
auto h = L'a'; // wchar_t
auto i = "Ala"; // const char*
auto j = L"Ala"; // const wchar_t*
auto k = true; // bool
Rozmiar liter nie ma znaczenia. Możesz pisać 'u' albo 'U'.
Zabiegi z auto są bardzo użyteczne. W Twoim przypadku utworzyłeś pętlę foreach, która przeiteruje po wszystkich elementach nodes. Tworząc pętlę nie musisz wiedzieć jakiego typu jest jeden element node.
Inny przykład:
int tablica[] = {1, 2, 3, 4};
for( auto x : tablica )
cout << x;
Pętla wypisze każdy element 1234. Zmienna "x" jest w tym momencie elementem tablicy. NIE wskaźnikiem, lecz zwykłą wartością int (bo takiego typu są elementy tablicy). Należy jeszcze zwrócić uwagę, że w takiej pętli nie możesz na stałe modyfikować elementów. Przykład: (tablica taka jak powyżej)
// wypisze: 1111
for( auto x : tablica )
{
x = 1;
cout << x;
}
Ale uwaga:
for( auto x : tablica )
x = 1;
// wypisze 1234
for( auto : tablica )
cout << x;
Jak widać elementów nie zmieniliśmy na stałe w pierwszej pętli. Warto o tym pamiętać, aby uniknąć kiedyś dziwnych problemów.
Łatwe, proste i przejrzyste.
Pozdrawiam :-)