- 新增现代 C++ 教程的 Preface 章节,包括英文和中文版本 - 添加 C++ Primer 练习代码 - 新增 Learn C++ 教程的 C++ 开发简介章节 - 添加头文件解析文档 - 更新 mkdocs.yml,包含新教程的目录结构 - 修改项目设置,使用 Python 3.10环境
129 lines
2.1 KiB
Markdown
129 lines
2.1 KiB
Markdown
# C++的谓词
|
||
|
||
# 1. 简介
|
||
|
||
① 返回bool类型的仿函数称为谓词。
|
||
|
||
② 如果operator()接受一个参数,那么叫做一元谓词。
|
||
|
||
③ 如果operator()接受两个参数,那么叫做二元谓词。
|
||
|
||
# 2. 一元谓词
|
||
|
||
|
||
```python
|
||
#include<iostream>
|
||
using namespace std;
|
||
#include<vector>
|
||
#include<algorithm>
|
||
|
||
//仿函数 返回值类型是bool数据类型,称为谓词
|
||
//一元谓词
|
||
class GreaterFive
|
||
{
|
||
public:
|
||
bool operator()(int val)
|
||
{
|
||
return val > 5;
|
||
}
|
||
};
|
||
|
||
void test01()
|
||
{
|
||
vector<int>v;
|
||
for (int i = 0; i < 10; i++)
|
||
{
|
||
v.push_back(i);
|
||
}
|
||
|
||
//查找容器中,有没有大于5的数字
|
||
//GreaterFive() 匿名函数对象
|
||
vector<int>::iterator it = find_if(v.begin(), v.end(), GreaterFive());
|
||
if (it == v.end())
|
||
{
|
||
cout << "未找到" << endl;
|
||
}
|
||
else
|
||
{
|
||
cout << "找到大于5的数字为:" << *it << endl;
|
||
}
|
||
}
|
||
|
||
int main()
|
||
{
|
||
test01();
|
||
|
||
system("pause");
|
||
|
||
return 0;
|
||
}
|
||
```
|
||
|
||
运行结果:
|
||
- 找到大于5的数字为:6
|
||
- 请按任意键继续. . .
|
||
|
||
# 3. 二元谓词
|
||
|
||
|
||
```python
|
||
#include<iostream>
|
||
using namespace std;
|
||
#include<vector>
|
||
#include<algorithm>
|
||
|
||
//仿函数 返回值类型是bool数据类型,称为谓词
|
||
//二元谓词
|
||
class MyCompare
|
||
{
|
||
public:
|
||
bool operator()(int val1,int val2)
|
||
{
|
||
return val1 > val2;
|
||
}
|
||
};
|
||
|
||
void test01()
|
||
{
|
||
vector<int>v;
|
||
v.push_back(10);
|
||
v.push_back(40);
|
||
v.push_back(50);
|
||
v.push_back(20);
|
||
v.push_back(30);
|
||
|
||
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(), MyCompare()); //MyCompare()为函数对象,是匿名函数
|
||
|
||
cout << "----" << endl;
|
||
for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
|
||
{
|
||
cout << *it << " ";
|
||
}
|
||
cout << endl;
|
||
}
|
||
|
||
int main() {
|
||
|
||
test01();
|
||
|
||
system("pause");
|
||
|
||
return 0;
|
||
|
||
}
|
||
```
|
||
|
||
运行结果:
|
||
- 10 20 30 40 50
|
||
- $----$
|
||
- 50 40 30 20 10
|
||
- 请按任意键继续. . .
|