>c; geraden.insert(c); } while (!includes(geraden.begin(), geraden.end(), letters.begin(), letters.end())); cout<

De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

Algoritmen en Datastructuren (ALDAT) EVMINX4 Week 6.

Verwante presentaties


Presentatie over: "Algoritmen en Datastructuren (ALDAT) EVMINX4 Week 6."— Transcript van de presentatie:

1 Algoritmen en Datastructuren (ALDAT) EVMINX4 Week 6

2 101 Galgje met find //… int main() { string s("galgje"); set v; do { for (string::size_type i(0); i>c; string::iterator r(s.begin()); while ((r=find(r, s.end(), c))!=s.end()) { v.insert(r-s.begin()); ++r; } while (v.size()!=s.size()); cout<<”Je hebt het woord gevonden:”<

3 102 Galgje met sets //… int main() { string w("galgje"); set geraden, letters; copy(w.begin(), w.end(), inserter(letters, letters.begin())); do { for (string::const_iterator i(w.begin()); i!=w.end(); ++i) if (geraden.count(*i)) cout<<*i; else cout<<'.'; cout<>c; geraden.insert(c); } while (!includes(geraden.begin(), geraden.end(), letters.begin(), letters.end())); cout<

4 103 Galgje met sets en for_each //… set geraden; int main() { string w("galgje"); set letters; copy(w.begin(), w.end(), inserter(letters, letters.begin())); do { for_each(w.begin(), w.end(), printLetter); cout<>c; geraden.insert(c); } while (!includes(geraden.begin(), geraden.end(), letters.begin(), letters.end())); cout<

5 104 Galgje met strings //… int main() { string w("galgje"); string geraden(w.length(), '.'); do { cout<>c; for (string::size_type i(0); i

6 105 Galgje met strings en transform //… class Raad { public: Raad() { cin>>c; } char operator()(char c1, char c2) { return c1==c ? c1 : c2; } private: char c; }; int main() { string w("galgje"); string geraden(w.length(), '.'); do { cout<

7 C++0x lambda functions Het gebruik van functor's wordt in C++0x sterk vereenvoudigd door het gebruik van lambda functions. Zie handouts. int main() { vector v; v.push_back(-3); v.push_back(2); v.push_back(-4); v.push_back(3); v.push_back(4); // print positive values ostream_iterator iout(cout, " "); copy_if(v.begin(), v.end(), iout, [](int i) { return i>0; }); cout<

8 C++0x lambda C++0x r=find_if(l.begin(), l.end(), bind2nd(greater_equal (),0)); r=find_if(l.begin(), l.end(), [](int i) { return i>=0; }); transform(v.begin(), v.end(), w.begin(), v.begin(), plus ()); transform(v.begin(), v.end(), w.begin(), v.begin(), [](int i1, int i2) { return i1 + i2; });

9 C++0x lambda v.erase( remove_if( v.begin(), v.end(), not1(bind2nd(modulus (), 2)) ), v.end() ); C++0x v.erase( remove_if( v.begin(), v.end(), [](int i) { return !(i%2); } ), v.end() );

10 C++0x closure Een lambda functie kan gebruik maken van identifiers die buiten de lambda functie gedeclareerd zijn. De verzameling van identifiers wordt een closure genoemd. Nederlands: (in)sluiting. Deze closure wordt tussen [ en ] opgegeven. [a, &b]a wordt “by value” en b wordt “by reference” ingesloten. [&]elke gebruikte variabele wordt “by reference” ingesloten. [=]elke gebruikte variabele wordt “by value” ingesloten. [=, &c]c wordt “by reference” ingesloten en alle andere gebruikte variabelen worden “by value” ingesloten.

11 C++0x closure int somEven = 0; for_each(v.begin(), v.end(), [&somEven](int i) { if (i%2 == 0) somEven += i; }); Bepaal de som van alle even getallen in een vector. [&] werkt ook. Wat is beter?

12 C++0x lambda return type Een lambda functie die slechts uit een return statement bestaat kan zelf zijn return type bepalen. Bij een lambda functie die uit meerdere statements bestaat moet het return type worden opgegeven. transform(w.begin(), w.end(), geraden.begin(), geraden.begin(), [=](char w_char, char geraden_char) -> char { if (w_char==c) return w_char; else return geraden_char; } );

13 C++0x lambda C++0x r=find_if(l.begin(), l.end(), bind2nd(greater_equal (),0)); r=find_if(l.begin(), l.end(), [](int i) { return i>=0; }); transform(v.begin(), v.end(), w.begin(), v.begin(), plus ()); transform(v.begin(), v.end(), w.begin(), v.begin(), [](int i1, int i2) { return i1 + i2; });

14 C++0x lambda v.erase( remove_if( v.begin(), v.end(), not1(bind2nd(modulus (), 2)) ), v.end() ); C++0x v.erase( remove_if( v.begin(), v.end(), [](int i) { return !(i%2); } ), v.end() );

15 C++0x closure Een lambda functie kan gebruik maken van identifiers die buiten de lambda functie gedeclareerd zijn. De verzameling van identifiers wordt een closure genoemd. Nederlands: (in)sluiting. Deze closure wordt tussen [ en ] opgegeven. [a, &b]a wordt “by value” en b wordt “by reference” ingesloten. [&]elke gebruikte variabele wordt “by reference” ingesloten. [=]elke gebruikte variabele wordt “by value” ingesloten. [=, &c]c wordt “by reference” ingesloten en alle andere gebruikte variabelen worden “by value” ingesloten.

16 C++0x closure int somEven = 0; for_each(v.begin(), v.end(), [&somEven](int i) { if (i%2 == 0) somEven += i; }); Bepaal de som van alle even getallen in een vector. [&] werkt ook. Wat is beter?

17 C++0x lambda return type Een lambda functie die slechts uit een return statement bestaat kan zelf zijn return type bepalen. Bij een lambda functie die uit meerdere statements bestaat moet het return type worden opgegeven. transform(w.begin(), w.end(), geraden.begin(), geraden.begin(), [=](char w_char, char geraden_char) -> char { if (w_char==c) return w_char; else return geraden_char; } );


Download ppt "Algoritmen en Datastructuren (ALDAT) EVMINX4 Week 6."

Verwante presentaties


Ads door Google