一个绑定器使用另一个函数对象f()和参数值V创建一个函数对象。被绑定函数对象必须为双目函数,也就是说有两个参数,A和B。STL 中的帮定器有:
·bind1st() 创建一个函数对象,该函数对象将值V作为第一个参数A。
·bind2nd()创建一个函数对象,该函数对象将值V作为第二个参数B。
#include <stdafx.h>
#include <iostream>
#include <algorithm>
#include <functional>
#include <list>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int iarray[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
list<int> aList(iarray, iarray + 10);
int k = 0;
k = count_if(aList.begin(), aList.end(), bind1st(greater<int>(), 8));
cout << "Number elements < 8 == " << k << endl;
return 0;
}
count_if()计算满足特定条件的元素的数目。 这是通过将一个函数对象和一个参数捆绑到为一个对象,并将该对象作为算法的第三个参数实现的。 注意这个表达式:
bind1st(greater<int>(), 8)
该表达式将greater<int>()和一个参数值8捆绑为一个函数对象。由于使用了bind1st(),所以该函数相当于计算下述表达式:
8 > q
表达式中的q是容器中的对象。因此这条语句是计算所有小于或等于8的对象的数目,所以结果是7。
如果将bind1st(greater<int>(), 8)改成
bind2nd(greater<int>(), 8)
则表示:q > 8 , 此时结果就是2了。
分享到:
相关推荐
例如,less和greater用于比较,bind1st和bind2nd用于绑定函数对象的第一个或第二个参数。 5. allocators(分配器):控制内存分配和释放,STL默认的allocators适用于大多数情况,但可以根据需求自定义以满足特定...
`bind1st`和`bind2nd`适配器可以将函数对象与特定的参数绑定,这样在调用时就无需提供这些参数。例如,`test2`函数展示了如何使用`bind2nd`来将`print2`函数对象与一个固定的参数(5)绑定,然后应用到向量的所有...
例如,less用于小于比较,greater用于大于比较,bind1st和bind2nd可以绑定函数对象的第一个或第二个参数。 STL源码解析中,会详细介绍这些组件的内部实现,包括数据结构的选择、内存管理策略、迭代器的实现细节以及...
例如,less(小于)函数对象常用于排序,而bind1st和bind2nd则可以绑定函数的参数。 5. 配对对象(pair):配对对象用于存储两个值,常用于关联容器如map和multimap中键值对的表示。 STL的使用方法: - 使用`#...
3. **函数对象(Functors)**:`functional`头文件包含了许多函数对象,如`greater`、`less`用于比较,`bind1st`、`bind2nd`用于绑定函数参数,以及`mem_fun`和`ptr_fun`用于成员函数和指针函数的操作。这些函数对象...
函数适配器如bind1st和bind2nd可以改变函数的参数绑定。 5. **仿函数(Function Object)**:也称为谓词,是一类行为类似函数的对象,通常用于算法中作为比较或操作函数。仿函数通过重载操作符()来实现其功能,可以...
比如,less用于小于比较,greater用于大于比较,bind1st和bind2nd则可以绑定函数对象的第一个或第二个参数。 侯捷在《STL源码剖析》中,不仅介绍了STL的基本使用,还深入解析了其内部实现,包括STL如何通过模板元...
绑定器如`bind1st`和`bind2nd`,能够将二元函数对象绑定到一个常量上,从而转换为一元函数对象。例如,`bind1st`和`bind2nd`可以与STL的仿函数(比如`less<int>`)结合,用于计算数组中满足条件的元素个数。同样,...
例如,`std::less`和`std::greater`用于定义元素的排序顺序,`std::bind1st`和`std::bind2nd`可以绑定函数的第一个或第二个参数。 STL的优势在于其模块化的设计,通过组合不同的容器、迭代器和算法,开发者可以快速...
5. **函数对象**:也称为仿函数,是封装了操作行为的对象,如less、greater用于比较,以及bind1st、bind2nd用于绑定函数参数。它们增强了C++的函数调用能力,使代码更加灵活和可读。 6. **容器适配器**:stack和...
STL中如`std::less`、`std::greater`等比较函数对象用于定制排序规则,`std::bind1st`和`std::bind2nd`可以绑定函数的第一个或第二个参数。 5. **适配器**:适配器类如`std::stack`、`std::queue`和`std::priority_...
- 如`std::less`、`std::greater`用于比较,`std::bind1st`、`std::bind2nd`用于绑定函数参数。 学习STL时,通常会从以下几个方面入手: 1. 理解容器的特性,选择适合的容器来存储数据。 2. 学习迭代器的使用,...
例如,`less`、`greater`、`equal_to`等比较函数对象,以及`bind1st`、`bind2nd`和`mem_fun`等函数绑定器。此外,用户还可以自定义功能对象以满足特定需求。 6. 基元: `allocator`(分配器)是STL中负责内存管理...
例如,less对象用于小于比较,greater用于大于比较,而bind1st和bind2nd可以绑定函数对象的参数。 书中还可能涵盖了泛型编程和模板元编程,这是C++ STL的精髓所在。泛型编程允许编写不依赖于具体数据类型的代码,...
例如,`std::less`和`std::greater`可以用来改变排序顺序,`std::bind1st`和`std::bind2nd`可以绑定函数的参数。 在《STL源码剖析》中,侯捷先生详细分析了这些组件的实现细节,包括模板元编程、迭代器的层次结构、...
例如,less对象用于比较元素,bind1st和bind2nd可以绑定函数对象的参数。 在《STL源码解析》这本书中,作者可能深入探讨了以下主题: 1. STL的实现机制:例如,如何通过模板元编程技术实现泛型编程,以及如何利用...
- `bind1st`和`bind2nd`:将函数与一个或两个参数绑定,形成新的函数对象。 5. **分配器(Allocator)**:分配器是STL中一个相对复杂但重要的概念,它负责内存的分配和释放。默认的分配器一般能满足大多数需求,但...
例如,`std::less`和`std::greater`可以用来定义排序规则,`std::bind1st`和`std::bind2nd`可以绑定函数的第一个或第二个参数。 在阅读侯杰的《STL源码剖析》和SGI STL源码时,你可以关注以下关键点: - **迭代器的...
常见的函数适配器包括bind1st和bind2nd,它们用于绑定函数对象的一个参数,以生成一个新的函数对象。取反适配器not1和not2则可以取反仿函数的逻辑结果。智能指针是另一种适配器,它们用来管理动态分配的对象的生命...
例如,`std::less`和`std::greater`用于比较元素,`std::bind1st`和`std::bind2nd`用于绑定函数参数。 4. **算法**:STL包含了一整套强大的算法库,如排序(sort)、查找(find)、复制(copy)、合并(merge)、...