编写程序,建立整型双端队列容器,从键盘上输入若干正整数,插入在双端队列容 器开始位置,输出容器内所有元素,再将双端队列容器内所有素数拷贝至整型向量容器 内,再输出整型向量容器内所有元素,要求使用函数对象。
时间: 2024-03-21 20:40:16 浏览: 13
从键盘任意输入两个整数,输出两数之间的素数,素数判断用函数实现。 扩展要求:1)程序可以循环执行,判断完一组可以再进行下一组;可以设定一个特殊键退出
5星 · 资源好评率100%
好的,我会尽力回答你的问题。下面是程序的实现:
```c++
#include <iostream>
#include <deque>
#include <vector>
#include <algorithm>
using namespace std;
// 判断是否为素数的函数对象
class is_prime {
public:
bool operator()(int n) const {
if (n < 2) return false;
for (int i = 2; i * i <= n; ++i) {
if (n % i == 0) return false;
}
return true;
}
};
int main() {
deque<int> dq; // 整型双端队列容器
int num;
cout << "请输入若干正整数,以0结束:" << endl;
while (cin >> num && num != 0) {
dq.push_front(num);
}
cout << "双端队列容器内所有元素:" << endl;
for (auto it = dq.begin(); it != dq.end(); ++it) {
cout << *it << " ";
}
cout << endl;
vector<int> vec; // 整型向量容器
auto it = copy_if(dq.begin(), dq.end(), back_inserter(vec), is_prime());
cout << "整型向量容器内所有素数元素:" << endl;
for (auto it = vec.begin(); it != vec.end(); ++it) {
cout << *it << " ";
}
cout << endl;
return 0;
}
```
程序中使用了 `deque` 容器来实现双端队列,并通过 `push_front` 函数将输入的正整数插入到队列的开始位置。然后使用 `copy_if` 函数将队列中的素数拷贝到向量容器中,其中的判断素数的函数对象为 `is_prime`。最后输出双端队列容器和向量容器中的元素。
注意:上述程序中,为了方便起见,我们将输入的若干正整数以 0 结束。如果需要改变这个结束标志,可以在程序中相应地修改。
阅读全文