所以我想做的是在一个队列中重载-运算符,以便从一个队列中删除与另一个队列共同的数字.ex:队列A:[5 4 3 7]队列B:[5 2 1 7]。
A-B
A=[4 3]
我已经做了这个。
CFilaInteiros& operator-(const CFilaInteiros& b)
{
if ( inicio == NULL )
cout << "Fila vazia..." << endl;
else
{
CNoFila * aux = inicio;
while( aux != NULL )
{
if(aux->dados==b->dados) retiraDaFila(aux->dados);
aux = aux->proximo;
}
}
}
我写这个是因为它说我要写很多代码,这是标题。
#ifndef CFilaInteiros_h
#define CFilaInteiros_h
using namespace std;
class CFilaInteiros;
class CNoFila{
int dados;
CNoFila *proximo;
friend class CFilaInteiros; // permite a esta classe aceder atributos private
};
class CFilaInteiros
{
private:
CNoFila *inicio, *fim;
public:
CFilaInteiros(void);
~CFilaInteiros(void);
void insereNaFila(const int item);
bool retiraDaFila(int &item);
void escreveFila(void) const;
bool filaVazia(void) const { return (inicio == NULL ); }
CFilaInteiros& operator-(const CFilaInteiros& b)
{
if ( inicio == NULL )
cout << "Fila vazia..." << endl;
else
{
CNoFila * aux = inicio;
while( aux != NULL )
{
if(aux->dados==b->dados) retiraDaFila(aux->dados);
aux = aux->proximo;
}
}
}
};
#endif
retiradafila(takes node from queue):
bool CFilaInteiros::retiraDaFila(int &item){
if (inicio == NULL) return false;
item = inicio->dados;
CNoFila * aux = inicio;
inicio = aux->proximo;
if (inicio == NULL) fim = NULL;
delete aux;
return true;
}
你发布了。
CFilaInteiros& operator-(const CFilaInteiros& b)
{
...
CNoFila * aux = inicio;
while( aux != NULL )
{
if(aux->dados==b->dados) retiraDaFila(aux->dados);
aux = aux->proximo;
}
}
但是... b->dados
是不正确的(b
不是指针,而 CFilaInteiros
没有 dados
),你是在A上迭代,而不是在B上迭代,这是不可能的。
我建议你在B上迭代。
CNoFila * aux = b.inicio;
while( aux != NULL )
{
retiraDaFila(aux->dados);
aux = aux->proximo;
}
好好享受吧:D
#include <vector>
#include <iostream>
using namespace std;
class Queue {
public:
vector<int> container;
Queue(vector<int> items) : container(items) {
}
void operator-(const Queue& other) {
vector<int> resultContainer;
for (size_t i=0; i<container.size(); ++i) {
if (container[i] != other.container[i]) {
resultContainer.push_back(container[i]);
}
}
container.clear();
for (int item : resultContainer) {
container.push_back(item);
}
}
void printValues() {
for (int item : container) {
cout<<item<<" ";
}
cout<<endl;
}
};
int main() {
Queue A(vector<int>{5,4,3,7});
Queue B(vector<int>{5,2,1,7});
cout<<"before:\nA = ";
A.printValues();
cout<<"B = ";
B.printValues();
cout<<endl;
A - B;
cout<<"after:\nA = ";
A.printValues();
cout<<"B = ";
B.printValues();
cout<<endl;
cout<<"end"<<endl;
}
输出。
before:
A = 5 4 3 7
B = 5 2 1 7
after:
A = 4 3
B = 5 2 1 7
end