Chyba nie rozumiem zakresowego "for"

Odpowiedz Nowy wątek
2019-07-21 13:06
0
    int tablica[16] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

    for (auto x : tablica) cout << tablica[x] << " ";
    cout << endl; 
    for (int i = 1; i < 16; i++) tablica[i - 1] = tablica[i];

    for (int i = 0; i < 16; i++) cout << tablica[i] << " "; //pierwszy sposób
    cout << endl;
    for (auto x : tablica) cout << tablica[x] << " ";  //drugi sposób

Dlaczego wyniki wyświetlone pierwszym sposobem różnią się od drugiego?

edytowany 1x, ostatnio: didzni, 2019-07-21 13:10

Pozostało 580 znaków

2019-07-21 13:08

Odnośnie drugiej pętli: x nie jest wtedy indeksem, ale konkretnym elementem tablicy, czyli nie robisz tablica[x], tylko x

Pozostało 580 znaków

2019-07-21 13:11
0

Rozumiem, dziękuję.

Możesz dla porządku oznaczyć przydatne odpowiedzi i zaznaczyć tą, która rozwiązała problem (jeżeli taka istnieje). - jackweb 2019-07-21 13:28

Pozostało 580 znaków

2019-07-21 15:12
1
didzni napisał(a):

Dlaczego wyniki wyświetlone pierwszym sposobem różnią się od drugiego?

W tym konkretnym przypadku wyniki powinny być identyczne, bo x = tablica[x].
Ale ogółem range-for jest właśnie po to, żeby w pętli operować już na konkretnej wartości i nie dotykać indeksów.

A ogółem do tablic polecam std::array. Wygodniejsze w użyciu.


Wole wizerunek z nożem w zębach, przejść po trupie
Niż zgrywać ćwierćinteligenta z piórkiem w d.
Wcześniej zamienia je miejscami, dla tego nie działa tak jak chce. - hauleth 2019-07-21 16:21
O kurde, faktycznie. Nie zauważyłem - tajny_agent 2019-07-21 19:49

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0