Skip to content

Latest commit

 

History

History
123 lines (96 loc) · 3.62 KB

File metadata and controls

123 lines (96 loc) · 3.62 KB
title binder1st Class | Microsoft Docs
ms.custom
ms.date 11/04/2016
ms.technology
cpp-standard-libraries
ms.topic reference
f1_keywords
xfunctional/std::binder1st
dev_langs
C++
helpviewer_keywords
binder1st class
ms.assetid 6b8ee343-c82f-48f8-867d-06f9d1d324c0
author corob-msft
ms.author corob
ms.workload
cplusplus

binder1st Class

A template class providing a constructor that converts a binary function object into a unary function object by binding the first argument of the binary function to a specified value.

Syntax

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& Func,
        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;
};

Parameters

Func The binary function object to be converted to a unary function object.

left The value to which the first argument of the binary function object is to be bound.

right The value of the argument that the adapted binary object compares to the fixed value of the second argument.

Return Value

The unary function object that results from binding the first argument of the binary function object to the value left.

Remarks

The template class stores a copy of a binary function object Func in op, and a copy of left in value. It defines its member function operator() as returning op( value, right).

If Func is an object of type Operation and c is a constant , then bind1st ( Func, c ) is equivalent to the binder1st class constructor binder1st< Operation> ( Func, c ) and more convenient.

Example

// 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;
}
\* Output:
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.
*\

Requirements

Header: <functional>

Namespace: std

See also

Thread Safety in the C++ Standard Library
C++ Standard Library Reference