iteratory w tablicach

0

Jaki jest standard oznaczania iteratorów tablicowych?

Mnie w LO na zajęciach programowania uczyli, że j jest zewnętrznym iteratorem, a i wewnętrzym czyli:

for(j = 0; j < tab.length; i++){
    for(i = 0; i < tab[j].length; j++{
        tab[j][i];
    }
}

tymczasem jakiś ekspert z Norwegii mi napisał, że ma być na odwrót.

2

Jeśli jest zwykła, pojedyncza pętla, to deklaruje się i jako iterator. Jeśli dochodzą kolejne zagnieżdżenia to deklaruje się j, k itd., według alfabetu. Nie jest to jakiś bardzo ważny standard, więc równie dobrze może być na odwrót. Choć przeważająca większość kodów (jaką widziałem) posiada i jako iterator głównej pętli.

0

Nie możesz wykorzystać interface interable?

I korzystać z for Each?

Bo ty jakieś stare nawyki przyprowadziłeś z R, a w obiektowych językach powinno się interface używać.

1

@J0ras: uczyłeś się programowania od podstaw, czy od najtrudniejszych rzeczy?

1

Przyjęło się i tak byłem uczony, że "i" jest od index.

Od kiedy pracuję w zespole i dużo bardziej zależy na czytelności i zrozumieniu kodu, unikam stosowania skrótów i używam pełnych nazw. np. dużo łatwiej się czyta podwójnego fora po macierzy gdy zamiast "i", "j" stosuje się "row", "column".

0

tak mnie w C++ uczyli.

C++:

for(auto row: tab) {
    for(auto elt: row) {
        elt;
    }
}

Albo, jak musisz mieć indeks, to tak:

for(auto it = tab.begin(); it != tab.end(); it++) {
    for(auto jt = it->begin(); jt != it->end(); jt++) {
        *jt;
    }
}

Jest też std::for_each, ale jakoś nigdy nie nauczyłem się tego używać.

W C (albo w C++ jeśli musisz dla jakiejś przyczyny operować na czystych tablicach):

for(tab_elt **it = tab; it != tab+tab_size; it++) {
    for(tab_elt *jt = *it; jt != *it+row_size; jt++) {
        *jt;
    }
}
0

@kpmh a co jak potrzebuję iteratorów (wiersz i kolumna) żeby wywoływać metodę z ich użyciem?

0

Nie za bardzo rozumiem, o co pytasz :(

To są iteratory w każdym razie:

for(auto it = tab.begin(); it != tab.end(); it++) {
    for(auto jt = it->begin(); jt != it->end(); jt++) {
        *jt;
    }
}

No i to std::for_each wywołuje funkcję do każdego iteratora.

Oczywiście to wszystko jest C++

1

@Julian_: wtedy iteratory nazywa się col i row - krótkie i od razu wiadomo czego dotyczą.

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