Iteraattorikategoriat: input, forward, bidirectional, random
Erota iteraattorikategoriat toisistaan ja valitse niille sopivat algoritmit.
Iteraattorikategoriat: input, forward, bidirectional, random on ilmainen C++ Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu C++ Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. C++ Academy-kurssilla on yhteensä 4 oppituntia.
Mikä iteraattori on?
Iteraattori on yleistetty osoitin. Algoritmit toimivat iteraattorien kautta, joten ne eivät ole sidottuja taustalla olevaan säilöön.
Viisi iteraattoriluokkaa
Iteraattorit luokitellaan niiden ominaisuuksien perusteella:
- Input — vain luku, yksi läpikäynti
- Output — vain kirjoitus, yksi läpikäynti
- Forward — luku ja kirjoitus, useita läpikäyntejä
- Bidirectional — voi liikkua eteen- ja taaksepäin
- Random Access — voi hypätä kokonaislukusiirtymän verran
Input-iteraattorit
Lue kerran, siirry eteenpäin ja toista. Et voi palata aiempaan kohtaan. Esimerkki: std::istream_iterator.
std::istream_iterator<int> in(std::cin), end;
while (in != end) {
std::cout << *in << " ";
++in;
}Output-iteraattorit
Vain kirjoitukseen. Esimerkkejä: std::ostream_iterator ja std::back_inserter.
std::ostream_iterator<int> out(std::cout, " ");
std::vector<int> v = {1, 2, 3};
std::copy(v.begin(), v.end(), out);Forward-iteraattorit
Kuten Input, mutta mahdollistaa useita läpikäyntejä — voit aloittaa uuden läpikäynnin samasta kohdasta. Esimerkki: std::forward_list.
Bidirectional-iteraattorit
Forward-iteraattorien ominaisuudet sekä --. Esimerkkejä: std::list, std::map ja std::set.
std::list<int> l = {1, 2, 3};
auto it = l.end();
--it; // OK, points to last elementRandom Access -iteraattorit
Bidirectional-iteraattorien ominaisuudet sekä hypyt: it + n, it - n, it[k], it1 - it2. Esimerkkejä: std::vector, std::deque ja raakataulukot.
Algoritmien vaatimukset
Jokainen algoritmi määrittää tarvitsemansa iteraattoriluokan vähimmäistason. std::sort vaatii Random Access -iteraattorin, kun taas std::find tarvitsee vain Input-iteraattorin.
Iteraattorin ominaisuudet
std::iterator_traits<Iter> tarjoaa iteraattorin arvotyypin, luokan ja muut ominaisuudet käännösaikana.
using Category = std::iterator_traits<It>::iterator_category;
using Value = std::iterator_traits<It>::value_type;std::advance ja std::distance
Siirrä iteraattoria tai mittaa etäisyys yleiskäyttöisesti. Ne hyödyntävät iteraattoriluokkaa tehokkaimman toteutuksen valitsemiseen.
auto it = v.begin();
std::advance(it, 5); // efficient on random access, O(n) otherwise
auto d = std::distance(v.begin(), it);Mukautetut iteraattorit
Oman iteraattorin kirjoittamista varten määritä kohdeluokan edellyttämät tyyppialiaset ja operaatiot — operator*, operator++, operator== ja niin edelleen.
C++20:n iteraattorikonseptit
C++20 lisäsi muodolliset konseptit, kuten std::input_iterator, std::forward_iterator ja std::random_access_iterator. Ne korvaavat vanhemman tagipohjaisen järjestelmän.
Pikatarkistus
Mikä iteraattoriluokka tukee lauseketta it + n vakioajassa?
Kertaus
Iteraattorit luokitellaan ominaisuuksien perusteella: Input, Output, Forward, Bidirectional ja Random Access. Algoritmit tarvitsevat vähintään tietyn luokan. Vektorin iteraattorit ovat Random Access -iteraattoreita, kun taas listan ja mapin iteraattorit ovat Bidirectional-iteraattoreita.
Opi C++ tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 51
- Oppitunnit
- 203
Usein kysytyt kysymykset
Onko oppitunti ”Iteraattorikategoriat: input, forward, bidirectional, random” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa C++ Academy-oppimispolun 3 oppituntia, myös oppitunnin “Iteraattorikategoriat: input, forward, bidirectional, random”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. C++ Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Iteraattorikategoriat: input, forward, bidirectional, random”?
Erota iteraattorikategoriat toisistaan ja valitse niille sopivat algoritmit. Harjoittelet C++ Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni C++ Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin C++ Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.
Kuinka kauan ”Iteraattorikategoriat: input, forward, bidirectional, random”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä C++ Academy-oppitunnilla?
Kyllä. Jokainen C++ Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Iteraattorikategoriat: input, forward, bidirectional, random
- Yleiset iteraattorimallit: begin, end, advance
- C++20:n Ranges-kirjaston esittely
- Aluesovittimet: views::filter, transform, take