bind2nd(greater<int>(), 3) co to robi?
Ostatnio zmodyfikowano 2015-04-11 20:38
gustawson Temat założony przez niniejszego użytkownika |
bind2nd(greater<int>(), 3) co to robi? » 2015-04-11 20:05:38 Witam! Bardzo prosze o pomoc w wyjaśnieniu co konkretnie robi bind2nd(greater<int>(),3) Tylko tak łopatologicznie jak krowie na rowie, czytałem definicje, ogladalem i analizowalem przyklady, ale nie potrafie jakoś logicznie sobie tego ułożyć więc zwracam sie do was o wyjaśnienie zwykłe, jakie jest tego zadanie. Nie mam problemu z określeniem roli Iteratorów jedynie ten bind mi stoi na przeszkodzie by pójść dalej. #include "stdafx.h" #include <iostream> #include <vector> #include <list> #include <cstdlib> #include <algorithm> #include <iterator> #include <iostream> #include <set> #include <functional>
using namespace std;
template < typename Iter1, typename Iter2, typename Pred > Iter2 copy_if( Iter1 b1, Iter1 e1, Iter2 b2, Pred p ) { while( b1 != e1 ) { if( p( * b1 ) ) { * b2 = * b1; ++b2; } ++b1; } return b2; }
struct Pred { bool operator ()( int b2 ) { if( b2 > 3 ) return true; else return false; } bool operator ()( int b1, int b2 ) { if( b1 == b2 ) return true; else return false; } };
int main() { int b[ 20 ], a[] = { 3, 5, 4, 9, 1, 3, 2 }; int * w = copy_if( a, a + 7, b, bind2nd( greater < int >(), 3 ) ); copy( b, w, ostream_iterator < int >( cout, " " ) ); } |
|
pekfos |
» 2015-04-11 20:16:51 To tworzy funktor sprawdzający, czy wartość jest większa od trzech. Ta funkcja jest zdeprecjonowana. |
|
gustawson Temat założony przez niniejszego użytkownika |
» 2015-04-11 20:22:49 To skoro ta funkcja sprawdza czy wartosc jest wieksza od 3 to po co nam ta część kodu? struct Pred { bool operator ()( int b2 ) { if( b2 > 3 ) return true; else return false; }
Edit: Aaa dobra juz wiem. W zadaniu w dalszej części kodu testującego jest copy_if z czwartym argumentem zamiast bind2nd to jest wlasnie ten Pred :) A wracajac jeszcze do tego bind2nd. Tak sobie analizuje, to w którym momencie działania programu ten bind2nd się wykonuje? |
|
pekfos |
» 2015-04-11 20:34:12 Tak sobie analizuje, to w którym momencie działania programu ten bind2nd się wykonuje? |
Dokładnie tam, gdzie masz zapisane wywołanie - przy obliczaniu argumentów dla copy_if(). |
|
gustawson Temat założony przez niniejszego użytkownika |
» 2015-04-11 20:38:54 Dobra, to wracam dalej do działania. Dzięki wielkie za pomoc! |
|
« 1 » |