Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

bind2nd(greater<int>(), 3) co to robi?

Ostatnio zmodyfikowano 2015-04-11 20:38
Autor Wiadomość
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.

C/C++
#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()
{
    //Zadanie 1
   
    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, " " ) );
   
   
}
P-130605
pekfos
» 2015-04-11 20:16:51
To tworzy funktor sprawdzający, czy wartość jest większa od trzech. Ta funkcja jest zdeprecjonowana.
P-130606
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?

C/C++
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?
P-130607
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().
P-130609
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!
P-130611
« 1 »
  Strona 1 z 1