首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏Visual Codex

    STL学习笔记(15)函数对象适配器

    函数适配器 bind1st bind2nd 现在有这么个需求,在遍历容器的时候,希望将容器中的值全部加上 100 之后显示出来,怎么做? 我们直接给函数对象绑定参数 编译阶段就会报错 for_each(v.begin(), v.end(), bind2nd(myprint(),100)); 如果我们想使用绑定适配器,需要我们自己的函数对象继承 cin >> x; for_each(v.begin(), v.end(), bind1st(MyPrint(), x)); //for_each(v.begin(), v.end(), bind2nd ( MyPrint(),x )); } //总结: bind1st 和 bind2nd 区别? //bind1st : 将参数绑定为函数对象的第一个参数 //bind2nd : 将参数绑定为函数对象的第二个参数 //bind1st bind2nd 将二元函数对象转为一元函数对象 class GreaterThenFive

    39830发布于 2021-07-08
  • 来自专栏韩曙亮的移动开发专栏

    【C++】STL 算法 ⑩ ( 函数适配器 | 函数适配器概念 | 函数适配器分类 | 函数适配器辅助函数 | std::bind2nd 函数原型及示例 | std::bind 函数原型及示例 )

    的创建 ; 常用的 " 函数适配器辅助函数 " : bind1st 函数 : 辅助构造 std::binder1st 绑定适配器 实例对象 , 可以 为 二元函数 第一个参数 绑定一个固定的值 ; bind2nd 进行 逻辑取反 操作 ; not2 函数 : 辅助构造 unary_negate 组合适配器 实例对象 , 将 二元谓词 的返回值 , 进行 逻辑取反 操作 ; 二、函数适配器使用示例 - std::bind2nd 函数 1、std::bind2nd 函数原型 std::bind2nd 是一个函数适配器 , 它用于 生成一个新的一元函数对象 , 该对象将给定二元函数对象的第二个参数绑定到一个特定的值 ; std: :bind2nd 函数原型如下 : template <class Operation> binder2nd<Operation> bind2nd(const Operation& op, const 函数适配器更加灵活 , std::bind1st 函数适配器 只能绑定 函数对象 第一个函数参数 ; std::bind2nd 函数适配器 只能绑定 函数对象 第二个函数参数 ; std::bind

    55510编辑于 2024-01-12
  • 来自专栏开发与安全

    从零开始学C++之STL(九):函数适配器bind2nd 、mem_fun_ref 源码分析、函数适配器应用举例

     v(a, a + 5);     cout << count_if(v.begin(), v.end(), is_odd) << endl;     //计算奇数元素的个数     // 这里的bind2nd bind2nd(modulus<int>(), 2)) << endl;     //bind1st(op, value)(param)相当于op(value, param);     cout < 首先,bind2nd 是一个模板函数,如下: // TEMPLATE FUNCTION bind2nd template < class _Fn2,          class _Ty > inline 最后总结,也就是count_if 计算容器中为奇数的元素个数,简单地 来说,可以理解成这样:bind2nd(op, value) (param)相当于op(param, value); 其中param 是元素值,value是需要绑定的参数,所谓 bind2nd 也即绑定第二个参数的意思,所以才说 bind2nd将二元函数对象modulus转换为一元函数对象,因为第二个参数就是2,当然 这里的第一个参数就是遍历得到的容器元素值了

    1.2K01发布于 2017-12-28
  • 来自专栏韩曙亮的移动开发专栏

    【C++】STL 算法 - transform 变换算法 ② ( 变换规则为 普通函数 | 变换规则为 Lambda 表达式 | 变换规则为 函数对象 | 变换规则为 函数适配器转换的函数对象 )

    (multiplies<int>(), 10) multiplies 函数对象源码如下 : 该函数对象的 重载 函数调用操作符 函数 , 接收 2 个参数 , 使用 bind2nd 函数适配器 为其设置第二个参数为 变换算法中 传入 使用 函数适配器 将预定义二元函数对象转成的 一元函数对象 transform(myVector.begin(), myVector.end(), myVector.begin(), bind2nd 变换算法中 传入 使用 函数适配器 将预定义二元函数对象转成的 一元函数对象 transform(myVector.begin(), myVector.end(), myVector.begin(), bind2nd (multiplies<int>(), 10) multiplies 函数对象源码如下 : 该函数对象的 重载 函数调用操作符 函数 , 接收 2 个参数 , 使用 bind2nd 函数适配器 为其设置第二个参数为 将变换结果 , 输出到 屏幕 标准输出流 中 transform(myVector.begin(), myVector.end(), ostream_iterator<int>(cout, " "), bind2nd

    56410编辑于 2024-01-15
  • 来自专栏韩曙亮的移动开发专栏

    【C++】STL 算法 ⑪ ( 函数适配器嵌套用法 | modulus 函数对象 - 取模运算 | std::count_if 函数原型 | std::not1 函数原型 )

    = 2; // 取模运算 , 模 2 返回值 1 就是奇数 , 返回值 0 就是偶数 int count = count_if(myVector.begin(), myVector.end(), bind2nd = 2; // 取模运算 , 模 2 返回值 1 就是奇数 , 返回值 0 就是偶数 int count = count_if(myVector.begin(), myVector.end(), bind2nd 返回值 0 就是偶数 // not1 将其取反 也就是获取的是 非奇数 个数 int count = count_if(myVector.begin(), myVector.end(), not1(bind2nd (modulus<int>(), 2))); 下面的代码中 , modulus 是一个二元函数对象 , 返回 0 或 1 可以当做 二元谓词 ; bind2nd(modulus<int>(), 2) 将 二元谓词 中的 第二个元素进行了绑定 , 只需要接收一个参数 , 变成了 一元谓词 ; not1(bind2nd(modulus<int>(), 2)) 将 上述 一元谓词 取反 , 得到一个新的一元谓词

    42610编辑于 2024-01-12
  • 10.1 C++ STL 模板适配与迭代器

    10.1 函数对象适配器 Bind2nd 是一个函数适配器,可以用来将一个双参函数转换成一个单参函数。使用该适配器可以修改函数中的第二个参数,而将第一个参数保持不变。 bind2nd 适配器的具体用法如下: template <class Operation> typename binder2nd<Operation>::type bind2nd(const Operation bind2nd 会返回一个binder2nd类型的函数对象,它是一个可调用的单参函数对象,可以代替原始的双参函数对象,并将该函数对象的第二个参数固定为arg,从而实现单参数函数的调用。 int num; cin >> num; // 让MyPrint函数绑定num参数,传参是传递到MyPrint中 for_each(var.begin(), var.end(), bind2nd argc, char* argv[]) { vector<int> var = {1,2,3,4,5,6,7,8,9,10}; for_each(var.begin(), var.end(),bind2nd

    45410编辑于 2023-10-11
  • 来自专栏流媒体

    STL算法(查找)简介adjacent_findbinary_searchcount/count_iffind/find_if/equal_range

    bind2nd( greater<int>(), 1) 示例 这里的Student沿用前面的定义。 vNum.begin(),vNum.end(),1) << endl; cout << "vNum count_if 1: " << count_if(vNum.begin(), vNum.end(),bind2nd

    46630发布于 2018-08-23
  • 10.1 C++ STL 模板适配与迭代器

    10.1 函数对象适配器Bind2nd 是一个函数适配器,可以用来将一个双参函数转换成一个单参函数。使用该适配器可以修改函数中的第二个参数,而将第一个参数保持不变。 bind2nd 适配器的具体用法如下:template <class Operation>typename binder2nd<Operation>::typebind2nd(const Operation bind2nd 会返回一个binder2nd类型的函数对象,它是一个可调用的单参函数对象,可以代替原始的双参函数对象,并将该函数对象的第二个参数固定为arg,从而实现单参数函数的调用。 1,2,3,4,5,6,7,8,9,10}; int num; cin >> num; // 让MyPrint函数绑定num参数,传参是传递到MyPrint中 for_each(var.begin(), var.end(), bind2nd int argc, char* argv[]){ vector<int> var = {1,2,3,4,5,6,7,8,9,10}; for_each(var.begin(), var.end(),bind2nd

    48520编辑于 2023-08-17
  • 来自专栏C++ STL和泛型编程

    STL的六大组件

    vector<int, std::alloctor<int>> c {40, 11, 45, 23}; cont << count_if(c.begin(), c.end(), notl(bind2nd

    58820编辑于 2022-11-03
  • 来自专栏全栈程序员必看

    STL库简述

    学习实例: STL 仿函数(一) bind函数回调 STL仿函数(二) bind1st,bind2nd 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

    65040编辑于 2022-11-07
  • 来自专栏未竟东方白

    【笔记】C++标准库: 体系结构与内核分析(下)

    核心是旧版本的bind2nd()和C++11的bind()适配器, 目的是让我们能利用适配器提前指定仿函数的一些参数的数值, 简化自动化的函数调用效果. 理解起来比较简单的bind2nd()是为了实现这个功能首先设计了下面这个辅助的模板函数作为接口: // 使用模板函数作为入口是因为只有模板函数能进行模板实参推导, 核心依然是函数里的模板类 template <class Operation, class T> inline binder2nd<Operation> bind2nd(const Operation& op, const T& x){ 其实现原理更复杂, 但是将原先多个适配器(例如bind1st, bind2nd)整合到一起了, 一个适配器可以实现下面四种功能, 且可以选择要绑定哪些参数, 参数顺序, 参数数量, 返回类型...非常自由

    1.1K20编辑于 2021-12-18
  • 来自专栏曾大稳的博客

    c++基础语法

    insert("aaa"); set1.insert("bbb"); set1.insert("ccc"); // 判断是不是包含 aaa // 怎么写仿函数,一定要确定好你的仿函数的参数 // bind2nd equal_to 中的 right set<string, greater<string>>::iterator find_it = find_if(set1.begin(), set1.end(),bind2nd count = " << count << endl; // 预定义好的函数对象 + 函数适配器 count = count_if(vector1.begin(), vector1.end(), bind2nd end(), 2); cout << "等于2的个数:" << number << endl; number = count_if(vector1.begin(), vector1.end(), bind2nd (), 2)); cout << "小于2的个数:" << number << endl; number = count_if(vector1.begin(), vector1.end(), bind2nd

    1.9K30发布于 2018-09-11
  • 来自专栏码出名企路

    Vector同时返回排序和原索引

    cout<<(location_index-data.begin())<<endl; location_index=find_if(data.begin(),data.end(),bind2nd

    91950编辑于 2022-06-16
  • 来自专栏MySQL从删库到跑路

    C++primer学习笔记(五)

    函数对象的函数适配器:绑定器 bind1st将给定值绑定到二元对象函数第一个实参 bind2nd 第二个实参。

    53010发布于 2020-07-22
  • C++ STL 标准模板库(排序/集合/适配器)算法

    1,2,3,4,5,6,7,8,9,10}; int num; cin >> num; // 让MyPrint函数绑定num参数,传参是传递到MyPrint中 for_each(var.begin(), var.end(), bind2nd argc, char* argv[]) { vector<int> var = {1,2,3,4,5,6,7,8,9,10}; for_each(var.begin(), var.end(),bind2nd

    86030编辑于 2022-12-28
  • 来自专栏二猫の家

    STL小结

    要想找到原因还是看源码,加入如果我们这里写一行代码,find_if(s.begin(),s.end(),bind2nd(func_equal(),temp)),在bind2nd函数里面的参数是const 例如: find_if(coll.begin(), coll.end(), bind2nd(greater <int>(), 42)); 这句话就是找coll中第一个大于42的元素。 greater <int>(),其实就是">"号,是一个2元函数 bind2nd的两个参数,要求一个是2元函数,一个是数值,结果是一个1元函数。 bind2nd就是个函数适配器。

    1.3K10编辑于 2022-11-30
  • 来自专栏全栈程序员必看

    C++ stl_stl函数

    函数对象适配器 //函数适配器bind1st bind2nd //现在我有这个需求 在遍历容器的时候,我希望将容器中的值全部加上100之后显示出来,怎么做? ; cin >> x; for_each(v.begin(), v.end(), bind1st(MyPrint(), x)); //for_each(v.begin(), v.end(), bind2nd ( MyPrint(),x )); } //总结: bind1st和bind2nd区别? //bind1st : 将参数绑定为函数对象的第一个参数 //bind2nd : 将参数绑定为函数对象的第二个参数 //bind1st bind2nd将二元函数对象转为一元函数对象 class GreaterThenFive 10; i++) { v.push_back(i); } // ptr_fun( )把一个普通的函数指针适配成函数对象 for_each(v.begin(), v.end(), bind2nd

    2.8K31编辑于 2022-09-27
  • 来自专栏owent

    C++ 新特性学习(四) — Bind和Function

    C++,并且很方便地实现了委托 这就是传说中的绑定库和增强型的函数对象 接下来一个一个来 Bind 可用于绑定函数、成员函数、函数对象、成员变量 这是老标准中std::bind1st和std::bind2nd

    2.8K10发布于 2018-08-01
  • 来自专栏Visual Codex

    STL学习笔记(16)常用STL算法

    for (int i = 0; i < 10; i++) { v.push_back(i); } for_each(v.begin(), v.end(), bind2nd

    75430发布于 2021-07-08
  • 来自专栏python3

    3 C++ Boost 字符,文本

    =find_last(text,"ll");//crange记录最后的ll的位置 transform( crange.begin(), crange.end(), crange.begin(), bind2nd { cout << copy_range<std::string>(*It) << endl; transform(It->begin(), It->end(), It->begin(), bind2nd

    1.8K30发布于 2020-01-14
领券