Aracılığıyla paylaş


binder2nd Sınıfı

İkili işlevin ikinci bağımsız değişkenini belirtilen bir değere bağlayarak ikili işlev nesnesini tek bir işlev nesnesine dönüştüren bir oluşturucu sağlayan sınıf şablonu. C++11'de kullanım dışı bırakıldı, C++17'de kaldırıldı.

Sözdizimi

template <class Operation>
class binder2nd
    : public unaryFunction <typename Operation::first_argument_type,
    typename Operation::result_type>
{
    typedef typename Operation::argument_type argument_type;
    typedef typename Operation::result_type result_type;
    binder2nd(
        const Operation& func,
        const typename Operation::second_argument_type& right);

    result_type operator()(const argument_type& left) const;
    result_type operator()(argument_type& left) const;
};

Parametreler

func
Bir tek işlev nesnesine dönüştürülecek ikili işlev nesnesi.

Doğru
İkili işlev nesnesinin ikinci bağımsız değişkeninin bağlanacağı değer.

Sol
Uyarlanmış ikili nesnesinin bağımsız değişkeninin değeri, ikinci bağımsız değişkenin sabit değeriyle karşılaştırılır.

Dönüş değeri

İkili işlev nesnesinin ikinci bağımsız değişkeninin sağ değere bağlanmasından kaynaklanan birli işlev nesnesi.

Açıklamalar

Sınıf şablonu, içinde ikili işlev nesnesi func'inopbir kopyasını, içinde ise sağvaluekopyasını depolar. Üye işlevini operator() döndüren op(left, value)olarak tanımlar.

Func türündeki Operation bir nesneyse ve c sabitse, bind2nd(func, c) sınıf oluşturucusunun binder2nd<Operation>(func, c)binder2nd eşdeğeridir ve daha kullanışlı olur.

Örnek

// functional_binder2nd.cpp
// compile with: /EHsc
#include <vector>
#include <functional>
#include <algorithm>
#include <iostream>

using namespace std;

int main()
{
    vector<int> v1;
    vector<int>::iterator Iter;

    int i;
    for (i = 0; i <= 5; i++)
    {
        v1.push_back(5 * i);
    }

    cout << "The vector v1 = ( ";
    for (Iter = v1.begin(); Iter != v1.end(); Iter++)
        cout << *Iter << " ";
    cout << ")" << endl;

    // Count the number of integers > 10 in the vector
    vector<int>::iterator::difference_type result1;
    result1 = count_if(v1.begin(), v1.end(),
        binder2nd<greater<int> >(greater<int>(), 10));
    cout << "The number of elements in v1 greater than 10 is: "
         << result1 << "." << endl;

    // Compare using binder1st fixing 1st argument:
    // count the number of integers < 10 in the vector
    vector<int>::iterator::difference_type result2;
    result2 = count_if(v1.begin(), v1.end(),
        binder1st<greater<int> >(greater<int>(), 10));
    cout << "The number of elements in v1 less than 10 is: "
         << result2 << "." << endl;
}
The vector v1 = ( 0 5 10 15 20 25 )
The number of elements in v1 greater than 10 is: 3.
The number of elements in v1 less than 10 is: 2.