操作员在队列中超载

问题描述 投票:-1回答:1

所以我想做的是在一个队列中重载-运算符,以便从一个队列中删除与另一个队列共同的数字.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;  
}
c++ queue operator-overloading
1个回答
0
投票

你发布了。

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;
  }

0
投票

好好享受吧: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
© www.soinside.com 2019 - 2024. All rights reserved.