1.编写class PrimePredicate,重载函数调用操作(),返回输入参数是否为素数: bool operator () (int x); 2.编写main()函数,使用stl容器,实现: (1)从控制台输入整数,前向插入到双向队列; (2)使用count_if()算法和函数对象,计算队列中素数的个数; (3)使用count_if算法,编写lambda函数,计算队列中0的个数; (4)输出素数和0的个数 输入格式: 数字之间空格隔开;按“ctrl+z”结束输入 输出格式: 每个数字之间用空格隔开(包括一行中最后一个数字后面也有一个空格) 每次输出后都输出回车换行符
时间: 2024-03-06 13:50:06 浏览: 68
以下是代码实现:
```c++
#include <iostream>
#include <deque>
#include <algorithm>
using namespace std;
class PrimePredicate {
public:
bool operator () (int x) {
if(x <= 1) return false;
for(int i = 2; i <= x / 2; i++) {
if(x % i == 0) {
return false;
}
}
return true;
}
};
int main() {
deque<int> dq;
int num;
while(cin >> num) {
dq.push_front(num);
}
PrimePredicate pp;
int primeNum = count_if(dq.begin(), dq.end(), pp);
int zeroNum = count_if(dq.begin(), dq.end(), [](int x) {return x == 0;});
cout << primeNum << " " << zeroNum << endl;
return 0;
}
```
解析:
1. 首先定义了一个 `PrimePredicate` 类,其中重载了函数调用操作 `()`,用于判断一个数是否为素数。
2. 在 `main()` 函数中,定义了一个双向队列 `dq`,并使用 `while` 循环从控制台输入整数,并前向插入到队列中。
3. 定义了一个 `PrimePredicate` 类的对象 `pp`,并使用 `count_if()` 算法和 `pp` 对象计算队列中素数的个数。
4. 使用 `count_if()` 算法和一个 lambda 函数,计算队列中 0 的个数。
5. 最后输出素数和 0 的个数,注意每次输出后都要换行。
阅读全文