Iteratorer och generiska algoritmer sid. 1 6/28/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Iterator vector ::iterator b = ivec.begin() vector ivec vector ::iterator e = ivec.end() vector ::iterator myiter ++myiter *myiter
Iteratorer och generiska algoritmer sid. 2 6/28/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Iteratoranvändning for (vector ::iterator myiterator = mycontainer.begin(); myiterator!= mycontainer.end(); ++ myiterator) cout << * myiterator << endl;
Iteratorer och generiska algoritmer sid. 3 6/28/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Iteratorklass ++ * == != container ::iterator (ev. fler)
Iteratorer och generiska algoritmer sid. 4 6/28/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Alla abstrakta containertyper definierar iterator-typ const_iterator-typ –för traversering av const container Varje abstrakt containertyp har members begin() end()
Iteratorer och generiska algoritmer sid. 5 6/28/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Generiska algoritmer Kan användas på containertyper och arrays Använder iteratorer Implementerar vanligt förekommande operationer t.ex. min, max, leta upp, sortera Algoritmen (tillvägagångssättet) är i princip oberoende av container-sort och vilken typ som lagras i containern/arrayen
Iteratorer och generiska algoritmer sid. 6 6/28/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Exempel min() Antag första elementet minst. Jämför med nästa. Om det är mindre, antag att det är minst. Då det är slut på element vet vi att vårt sista antagande är rätt
Iteratorer och generiska algoritmer sid. 7 6/28/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Generisk implementation Vi behöver veta Hur vi får fram första elementet Hur vi får fram nästa element Hur man jämför element Hur vi vet att det är slut på element
Iteratorer och generiska algoritmer sid. 8 6/28/2015 CD5250 OOP med C++ Mats Medin MDH/IDT exempel ur algorith.h template ForwardIterator min_element (ForwardIterator first, ForwardIterator last) { if (first == last) return first; ForwardIterator result = first; while (++first != last) if (*first < *result) result = first; return result; }
Iteratorer och generiska algoritmer sid. 9 6/28/2015 CD5250 OOP med C++ Mats Medin MDH/IDT exempel ur algorith.h template InputIterator find (InputIterator first, InputIterator last, const T& value) { while (first != last && *first != value) ++first; return first; }