您好,欢迎来到纷纭教育。
搜索
您的当前位置:首页理解bind1st和bind2nd函数

理解bind1st和bind2nd函数

来源:纷纭教育


值(v)是一个固定的参数。换言之,uf(x)等价于: bf( x, v) 当使用bind2nd时 bf( v, x) 当使用bind1st时 bind1st 和 bind2nd 函数在处理谓词时非常有用。它们使得二元谓词能够转换成一元谓词;这常用于将一个范围内的所有值与一个特定的值比较: std::vecto

值(v)是一个固定的参数。换言之,uf(x)等价于:

  • bf( x, v) – 当使用bind2nd时
  • bf( v, x) – 当使用bind1st时
  • bind1stbind2nd函数在处理谓词时非常有用。它们使得二元谓词能够转换成一元谓词;这常用于将一个范围内的所有值与一个特定的值比较:

    std::vector< int> a;
    // ……填充a

    // 移除所有小于30的元素
    a.erase( std::remove_if( a.begin(), a.end(),
    std::bind2nd( std::less< int>(), 30)), a.end());

    在大多数时候,bind2nd就足够了,像上面的例子。不管怎样,在进行泛型编程时,你会实现一些处理谓词的函数。谓词指定了范围内的排序准则,通常是“<”(std::less< type>)。记住你可以仅用一个给定的“<”运算符来实现“<=”、“<=”和“>”运算符。这时你会发现bind1stbind2nd都能用上。

    #include
    #include
    #include

    template< class iterator, class predicate, class doer>
    void for_each_if( iterator itFirst, iterator itLast, predicate pred, doer do_it)
    {
    while ( itFirst != itLast)
    {
    if ( pred( *itFirst)) do_it( *itFirst);
    ++itFirst;
    }
    }

    void print( int i) { std::cout << i << " "; }

    int main(int argc, char* argv[])
    {
    int aNumbers[] = { 10, 5, , 9, 30, -2, -8, 7, 33, 25, 30, 76, 0, 2};
    int nCount = sizeof( aNumbers) / sizeof( aNumbers[ 0]);

    // a < b
    std::cout << "/nNumbers less than 30: ";
    for_each_if( aNumbers, aNumbers + nCount,
    std::bind2nd( std::less< int>(), 30), print);
    std::cout << "/nNumbers bigger than 30: ";
    // a > b
    for_each_if( aNumbers, aNumbers + nCount,
    std::bind1st( std::less< int>(), 30), print);
    std::cout << "/nNumbers less or equal than 30: ";
    // a <= b <=> !(a > b)
    for_each_if( aNumbers, aNumbers + nCount,
    std::not1( std::bind1st( std::less< int>(), 30)), print);
    std::cout << "/nNumbers bigger or equal than 30: ";
    // a >= b <=> !(a < b)
    for_each_if( aNumbers, aNumbers + nCount,
    std::not1( std::bind2nd( std::less< int>(), 30)), print);
    return 0;
    }

    Copyright © 2019- fenyunshixun.cn 版权所有 湘ICP备2023022495号-9

    违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

    本站由北京市万商天勤律师事务所王兴未律师提供法律服务