Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
pl:dydaktyka:jimp2:2017:labs:operatory [2017/04/10 14:46]
mwp [Ćwiczenia]
pl:dydaktyka:jimp2:2017:labs:operatory [2019/06/27 15:50] (aktualna)
Linia 233: Linia 233:
     - [1 plus] co należy zrobić z powyższym operatorem, żeby była możliwa operacja <code cpp>​repository["​201500022324"​].ChangeFirstName("​Ziemowit"​);</​code>​ i została zmienione imię studenta już w repozytorium.     - [1 plus] co należy zrobić z powyższym operatorem, żeby była możliwa operacja <code cpp>​repository["​201500022324"​].ChangeFirstName("​Ziemowit"​);</​code>​ i została zmienione imię studenta już w repozytorium.
     - [1 plus] dopisz operator rzutowania dla StudyYear do typu int.     - [1 plus] dopisz operator rzutowania dla StudyYear do typu int.
-  - [2 plusy] Zdefiniować ​strukturę Zipper ze statyczną metodą zip(std::​vector<​std::​string>,​ std::​vector<​int>​),​ która pozwoli na uruchomienie następującego kodu: <code cpp>int foo(const vector<​string>​ &v1, const vector<​int>​ &v2) {+  - [2 plusy] Zdefiniować ​klasę Zipper ze statyczną metodą zip(std::​vector<​std::​string>,​ std::​vector<​int>​),​ która pozwoli na uruchomienie następującego kodu: <code cpp>int foo(const vector<​string>​ &v1, const vector<​int>​ &v2) {
 for (const pair<​string,​int>​ &p : Zipper::​zip(v1,​v2)) { for (const pair<​string,​int>​ &p : Zipper::​zip(v1,​v2)) {
   if (p.first == "​elo"​) {   if (p.first == "​elo"​) {
Linia 240: Linia 240:
 } }
 return 0; return 0;
 +}</​code> ​ Podpowiedź:​ udostępniona też [[http://​coliru.stacked-crooked.com/​a/​ff24fd32a47a6e18|TU]] <code cpp>#​include <​iostream>​
 +#include <​string>​
 +#include <​vector>​
 +#include <​utility>​
 +
 +using std::cout;
 +using std::endl;
 +using std::​vector;​
 +using std::​string;​
 +using std::pair;
 +using std::​literals::​string_literals::​operator""​s;​
 +
 +
 +class ZipperIterator {
 +  public: ​  
 +   ​pair<​string,​int>​ operator*() const; //wmagane w linii 74
 +   ​ZipperIterator &​operator++();​ //wymagane w linii 73 for(_;_;TU)
 +   bool operator!=(const ZipperIterator &other) const; //wymagane w linii 73 for(_;TU;_)
 +  private:
 +   //​TODO
 +};
 +
 +//​umożliwia przeglądanie dwóch wektorów na raz, w jednej pętli range-for
 +class Zipper {
 +  public:
 +   ​static Zipper zip(const vector<​string>​ &vs, const vector<​int>​ &vi);
 +   
 +   ​ZipperIterator begin(); //wymagane w linii 73 for(TU;_;_)
 +   ​ZipperIterator end(); //wymagane w linii 73 for(_;TU;_)
 +  private:
 +   //​TODO
 +};
 +
 +
 +
 +int main()
 +{
 +    vector<​int>​ vi = {1,2,3};
 +    vector<​string>​ vs = {"​one"​s,"​two"​s,"​three"​s};​
 +    ​
 +    //PROSTY przykład
 +    for (const auto i : vi) {
 +      cout << i;   
 +    }
 +    cout << endl;
 +    //to samo bez auto:
 +    for (const int i : vi) {
 +      cout << i;   
 +    }
 +    cout << endl;
 +    //​przetłumaczony powyższa petla mniej wiecej tak jak to kompilator ​
 +    //rozumie:
 +    for (vector<​int>::​iterator it = vi.begin(); it != vi.end(); ++it) {
 +      const int i = *it;
 +      cout << i;
 +    }
 +    cout << endl;
 +    ​
 +    //Przykład z zipperem
 +    for (const auto &p : Zipper::​zip(vs,​vi)) {
 +      cout << p.second << " is " << p.first;
 +    }
 +    cout << endl;
 +    //to samo bez auto:
 +    for (const pair<​string,​int>​ &p : Zipper::​zip(vs,​vi)) {
 +      cout << p.second << " is " << p.first;
 +    }
 +    cout << endl;
 +    ​
 +    //​przetłumaczony powyższa petla mniej wiecej tak jak to kompilator ​
 +    //rozumie:
 +    Zipper tmp =  Zipper::​zip(vs,​vi);​
 +    for (ZipperIterator it = tmp.begin();​ it != tmp.end(); ++it) {
 +      const pair<​string,​int>​ &p = *it;
 +      cout << p.second << " is " << p.first;
 +    }
 +    cout << endl;
 }</​code>​ }</​code>​
  
pl/dydaktyka/jimp2/2017/labs/operatory.1491828388.txt.gz · ostatnio zmienione: 2019/06/27 15:52 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0