Video: You can learn Arduino in 15 minutes. 2024
Programatorul C ++ iterează printr-o matrice furnizând indicele fiecărui element. Cu toate acestea, această tehnică nu funcționează pentru containere precum list care nu permit accesul aleatoriu. S-ar putea imagina o soluție bazată pe metode precum getFirst () și getNext () ; totuși, designerii Bibliotecii Standard Template au dorit să ofere o metodă comună pentru traversarea oricărui tip de container.
Pentru aceasta, Biblioteca de șabloane standard definește iteratorul.
Un iterator este un obiect care indică membrii unui container. În general, fiecare iterator acceptă următoarele funcții:
-
O clasă poate returna un iterator care indică primul membru al colecției.
-
Iteratorul poate fi mutat de la un membru la altul.
-
Iteratorul returnează o indicație atunci când ajunge la sfârșitul listei.
-
Programul poate prelua elementul indicat de iterator.
Biblioteca de șabloane standard oferă, de asemenea, iteratori inversi pentru a se deplasa înapoi prin liste. Tot ceea ce se referă la iteratori se aplică în egală măsură iteratorilor inversi.
Codul necesar pentru a itera printr-o listă este diferit de cel necesar pentru a traversa un vector (pentru a numi doar două exemple). Cu toate acestea, iteratorul ascunde aceste detalii.
Metoda begin () returnează un iterator care indică primul element al unei liste. Operatorul de indirecție * () extrage o referință la obiectul indicat de iterator. Operatorul ++ deplasează iteratorul la următorul element din listă.
Un program continuă să se incrementeze prin listă până când iteratorul este egal cu valoarea returnată de end () . Următorul fragment de cod pornește de la începutul unei liste de studenți și afișează fiecare dintre numele lor:
void displayStudents (listă și studenți) {// alocă un iterator care indică primul // element din lista de listă:: iterator iter = studenți. ÎNCEPE(); // continuă să bucle prin listă până când // iteratorul atinge sfârșitul listei în timp ce (iter! = students. end ()) {// returnează Studentul punctele iterator la Student & s = * iter; cout << s. sName << endl; // mutați acum iteratorul pe următorul element // în lista iter ++;}}
Declarațiile pentru iteratori pot deveni foarte complexe. Aceasta este probabil cea mai bună justificare pentru auto declarația introdusă cu standardul '11:
pentru (auto iter = students.Acest lucru declară iter ca fiind un iterator de orice tip este returnat de lista de metode:: begin () , evitând declarațiile torturate afișate în fragmentul de cod anterior.Cat de tare e asta!