C++学习记录-内建函数对象
C++学习记录-内建函数对象
概念:
- STL内建了一些函数对象
分类:
- 算术仿函数
- 关系仿函数
- 逻辑仿函数
用法:
-
这些仿函数所产生的对象,用法和一般函数完全相同
-
使用内建函数对象,需要引入头文件
1
算数仿函数
- 功能描述:
实现四则运算
其中negate是一元运算,其余的都是二元运算
-
函数:
返回类型即<>中定义的类型
T plus<T> //加法仿函数
T minus<T> //减法仿函数
T multiplies<T> //乘法仿函数
T divides<T> //除法仿函数
T modulus<T> //取模仿函数
T negate<T> //取相反数仿函数 -
示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using namespace std;
void test1()
{
negate<int> n;
cout << n(50) << endl;//输出-50
plus<int> p;
cout << p(10,20) << endl;
}
int main()
{
test1();
return 0;
}
逻辑仿函数
-
函数:
- bool logical_and<T> //逻辑与
- bool logical_or<T> //逻辑或
- bool logical_not<T> //逻辑非
-
示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45//取非运算
using namespace std;
void test1()
{
vector<bool> v;
v.push_back(false);
v.push_back(true);
v.push_back(false);
v.push_back(false);
v.push_back(true);
for (vector<bool>::iterator it = v.begin(); it != v.end(); it++)
{
cout << *it << " ";
}
cout << endl;
vector<bool> va;
va.resize(v.size());//记得给空的vector空间,否则下面的transform会报错
transform(v.begin(),v.end(),va.begin(),logical_not<bool>());
//搬运算法,将一个vector的元素搬运到另一个vector中
for (vector<bool>::iterator it = va.begin(); it != va.end(); it++)
{
cout << *it << " ";
}
/*-----------------------------------------------*/
logical_not<bool> ln;
cout << ln(false) << endl;
}
int main()
{
test1();
return 0;
}
关系仿函数
-
关系仿函数
返回的是bool类型
-
函数
bool equal_to<T> //等于
bool not_equal_to<T> //不等于
bool greater<T> //大于
bool greater_equal<T> //大于等于
bool less<T> //小于
bool less_equal<T> //小于等于 -
示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38//使vector降序排列
using namespace std;
void test1()
{
vector<int> v;
v.push_back(30);
v.push_back(60);
v.push_back(20);
v.push_back(40);
v.push_back(10);
sort(v.begin(), v.end());
for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
{
cout << *it << " ";
}
cout << endl;
sort(v.begin(), v.end(), greater<int>());//降序排序
for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
{
cout << *it << " ";
}
}
int main()
{
test1();
return 0;
}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 星辰微光的博客!





