给定一个文本文件,其中包含需要重写到队列 Qu1 的整数图像。在队列 Qu2 中,首先写入回文数,然后是数字和为奇数的数,将其余数写入输出文件。使用 OOP 方法创建程序。
我做了我能做的,但出现了很多错误......我请求你的帮助!
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <queue>
#include <fstream>
#include <algorithm>
#include <iterator>
using namespace std;
unsigned getReverse(unsigned n) {
unsigned r = n % 10;
while (n /= 10) {
r = r * 10 + n % 10;
}
return r;
}
bool isPalindrom(const unsigned n) {
return n == getReverse(n);
}
class cQueue
{
protected:
queue<int> p_;
public:
void IO();
void Del()
{
while (!p_.empty())
{
p_.pop();
}
};
};
void cQueue::IO()
{
ifstream ifile("text.txt");
ofstream ofile("output.txt", ios::trunc);
queue<int> qu1 = p_;
for_each(istream_iterator<int>(ifile), istream_iterator<int>(), [&qu1](int n)
{
qu1.push(n);
});
cout << "Number of items in the queue: " << qu1.size() << endl;
while (!qu1.empty())
{
cout << "\nHere they are: " << qu1.front() << '\n';
}
queue<int> qu2;
copy_if(queue<int>(qu1), queue<int>(), queue<int>(qu2), [&qu1](int n) -> bool
{
if (isPalindrom(n)) {
return n;
}
else if (n) {
// Сумма нечетных чисел ?
}
else
{
// В выходной файл ?
}
});
cout << "Number of items in the queue: " << qu2.size() << endl;
while (!qu2.empty())
{
cout << "\nHere they are: " << qu2.front() << '\n';
}
}
int main()
{
cout << "Demo Queue OOP" << endl;
cQueue queue;
queue.IO();
cout << endl;
queue.Del();
_getch();
return 0;
}
错误 C2675 一元“++”:“std::queue>>”未定义此运算符或转换为内置 \algorithm 运算符可接受的类型 594
错误 C2100 无效间接\算法 596
错误 C2100 无效间接\算法 598
错误 C2675 一元 '++': 'std::queue>>' 未定义此运算符或转换为内置 \algorithm 运算符 599 可接受的类型
错误 C4996 'std::copy_if::_Unchecked_iterators::_Deprecate': 使用可能不安全的参数调用 'std::copy_if' - 此调用依赖调用者检查传递的值是否正确。要禁用此警告,请使用 -D_SCL_SECURE_NO_WARNINGS。请参阅有关如何使用 Visual C++ 'Checked Iterators' \algorithm 589 的文档
copy_if
您需要为队列制作自己的。或者不使用队列。