Kelas binder2
Templat kelas yang menyediakan konstruktor yang mengonversi objek fungsi biner menjadi objek fungsi unary dengan mengikat argumen kedua dari fungsi biner ke nilai yang ditentukan. Tidak digunakan lagi di C++11, dihapus di C++17.
Sintaks
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;
};
Parameter
func
Objek fungsi biner yang akan dikonversi ke objek fungsi unary.
right
Nilai di mana argumen kedua objek fungsi biner akan terikat.
left
Nilai argumen yang dibandingkan dengan objek biner yang diadaptasi dibandingkan dengan nilai tetap argumen kedua.
Nilai hasil
Objek fungsi unary yang dihasilkan dari mengikat argumen kedua objek fungsi biner ke kanan nilai.
Keterangan
Templat kelas menyimpan salinan func objek fungsi biner di op
, dan salinan langsung di value
. Ini mendefinisikan fungsi operator()
anggotanya sebagai mengembalikan op(left, value)
.
Jika func adalah objek jenis Operation
dan c adalah konstanta, maka bind2nd(func, c)
setara dengan binder2nd
konstruktor binder2nd<Operation>(func, c)
kelas , dan lebih nyaman.
Contoh
// 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.