Bagikan melalui


Kelas binder1

Templat kelas menyediakan konstruktor yang mengonversi objek fungsi biner menjadi objek fungsi unary dengan mengikat argumen pertama dari fungsi biner ke nilai yang ditentukan. Tidak digunakan lagi di C++11 demi pengikatan, dan dihapus di C++17.

Sintaks

template <class Operation>
class binder1st
    : public unaryFunction <typename Operation::second_argument_type,
                             typename Operation::result_type>
{
public:
    typedef typename Operation::argument_type argument_type;
    typedef typename Operation::result_type result_type;
    binder1st(
        const Operation& binary_fn,
        const typename Operation::first_argument_type& left);

    result_type operator()(const argument_type& right) const;
    result_type operator()(const argument_type& right) const;

protected:
    Operation op;
    typename Operation::first_argument_type value;
};

Parameter

binary_fn
Objek fungsi biner yang akan dikonversi ke objek fungsi unary.

left
Nilai di mana argumen pertama objek fungsi biner akan terikat.

right
Nilai argumen yang dibandingkan dengan objek biner yang diadaptasi dibandingkan dengan nilai tetap argumen kedua.

Tampilkan Nilai

Objek fungsi unary yang dihasilkan dari mengikat argumen pertama objek fungsi biner ke nilai yang tersisa.

Keterangan

Templat kelas menyimpan salinan objek fungsi biner binary_fn di op, dan salinan kiri di value. Ini mendefinisikan fungsi operator() anggotanya sebagai mengembalikan op(value, right).

Jika binary_fn adalah objek jenis Operation dan c merupakan konstanta, maka bind1st(binary_fn, c) adalah yang lebih nyaman setara dengan binder1st<Operation>(binary_fn, c). Untuk informasi selengkapnya, lihat bind1st.

Contoh

// functional_binder1st.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(),
        binder1st<less<int> >(less<int>(), 10));
    cout << "The number of elements in v1 greater than 10 is: "
         << result1 << "." << endl;

    // Compare use of binder2nd fixing 2nd argument:
    // count the number of integers < 10 in the vector
    vector<int>::iterator::difference_type result2;
    result2 = count_if(v1.begin(), v1.end(),
        binder2nd<less<int> >(less<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.