>c; geraden.insert(c); } while (!includes(geraden.begin(), geraden.end(), letters.begin(), letters.end())); cout< >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<s.size(); ++i) if (find(v.begin(), v.end(), i)==v.end()) cout<<'.'; else cout<<s[i]; cout<<endl<<"Geef een letter: "; char c; cin>>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:”<<s;

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<<endl<<"Raad een letter: "; char c; cin>>c; geraden.insert(c); } while (!includes(geraden.begin(), geraden.end(), letters.begin(), letters.end())); cout<<w<<" is geraden!"<<endl; //…

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<<endl<<"Raad een letter: "; char c; cin>>c; geraden.insert(c); } while (!includes(geraden.begin(), geraden.end(), letters.begin(), letters.end())); cout<<w<<" is geraden!"<<endl; //… void printLetter(char c) { if (geraden.count(c)) cout<<c; else cout<<'.'; }

5 104 Galgje met strings //… int main() { string w("galgje"); string geraden(w.length(), '.'); do { cout<<geraden<<endl<<"Raad een letter: "; char c; cin>>c; for (string::size_type i(0); i<w.length(); ++i) if (w[i]==c) geraden[i]=c; } while (geraden!=w); cout<<w<<" is geraden!"<<endl; //…

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<<geraden<<endl<<"Raad een letter: "; transform(w.begin(), w.end(), geraden.begin(), geraden.begin(), Raad()); } while (geraden!=w); cout<<w<<" is geraden!"<<endl; //…

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<<endl; cin.get(); return 0; }

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