Salve, ho realizzato questo codice dove vado ad inserire in una coda solo i valori positivi presenti in un'altra coda.
Perchè se la dichiarazione "Coda<int> P(dim);" si trova fuori dal while mi stampa questo output sbagliato: 3 3 3 3, mentre se la inserisco all'interno del while ottengo l'output corretto: 3 8 9 3 ?
Grazie.
testcoda.cpp
#include <iostream>
#include "codavt.h"
using namespace std;
int main(){
int dim = 6;
Coda<int> C(dim);
C.inCoda(3);
C.inCoda(8);
C.inCoda(-36);
C.inCoda(9);
C.inCoda(0);
C.inCoda(3);
//Coda<int> P(dim); <---così non funziona
int e;
while(!C.codaVuota()){
Coda<int> P(dim); <---così funziona
e = C.leggiCoda();
if (e > 0){
P.inCoda(e);
cout << P.leggiCoda();
}
C.fuoriCoda();
}
system("pause");
return 0;
}
codavt.h
#ifndef _CODAVT_
#define _CODAVT_
template < class tipoelem >
class Coda {
public:
Coda(int n){
maxlung = n;
creaCoda();
}
~Coda(){delete[] elementi;}
void creaCoda(){
elementi = new tipoelem[maxlung];
testa = 0;
lung = 0;
}
bool codaVuota(){
return (lung == 0);
}
tipoelem leggiCoda(){
if (!codaVuota())
return (elementi[testa]);
}
void fuoriCoda(){
if (!codaVuota()){
testa = (testa + 1) % maxlung;
lung--;
}
}
void inCoda(tipoelem a){
if (lung != maxlung){
elementi[(testa+lung) % maxlung] = a;
lung++;
}
}
private:
tipoelem *elementi;
int testa, lung, maxlung;
};
#endif //CODAVT_