mam taka metode odejmowanie kolejek priorytetowych i zrobilem ja tak jak jest ponizej ale cos nei spelnia moich oczekiwan, nie wiem czy to jest spowodowane ta metoda czy konstruktorem kopiujacym moglby ktos sprawdzic czy breaki dobrze dzialaja w tej metodzie (ew.ponizej konstruktor kopiuajcy)
Kod: Zaznacz cały
template<class Type>//odejmowanie dwoch kolejek
Kolejka<Type> Kolejka<Type>::operator-(const Kolejka<Type>& rv)const{
if(head==NULL) return *this;
if(rv.head==NULL) return *this;
Kolejka<Type> r((akt_wielkosc)/sizeof(Element<Type>));
Element<Type>* wsk=rv.head;
Element<Type>* wsk_this=head;
while(wsk_this!=NULL)
{
while(wsk!=NULL)
{
if(wsk->data==wsk_this->data)break; //Jak element wystepuje na dwoch listach to nie dodawaj do r
if(wsk->next==NULL){ //Jesli element nie wystepuje w rv
if(wsk->data!=wsk_this->data)
{r+=wsk_this->data; //Dodaj element jesli nie wystepuje na liscie rv
break; //i nie ma juz wiecej elementow w tej liscie
}}
wsk=wsk->next;
}
wsk_this=wsk_this->next;
wsk=rv.head;
}
return r;
}
ew konstruktor kopiujacy
Kod: Zaznacz cały
template <class Type>
Kolejka<Type>::Kolejka(const Kolejka<Type>& wzorzec){
size_max=wzorzec.size_max; //Nowa kolejka priorytetowa ma ten sam rozmiar co kolejka p., z ktorej kopiujemy
akt_wielkosc=0; //Nowa kolejka jeszcze nie zawiera zadnego elementu
Element<Type>* wsk_pom=wzorzec.head;
while(wsk_pom!=NULL) //Kopiowanie elementow ze "starej" kolejki p. do nowej
{
Element<Type>* wsk=new Element<Type>; //Przydzielenie pamieci dla elementu kolejki p.
assert(wsk!=NULL);
if (head!=NULL)current->next=wsk; //Ustawienie wskaznika ostaniego elementu na nowy element
else head=current=wsk; //Jesli lista pusta, to obydwa wskazniki wskazuja to samo
current=wsk; //Current wskazuje teraz na nowo dodany element
wsk->data=wsk_pom->data; //Przypisanie danych
akt_wielkosc+=sizeof(Element<Type>); //Zwiekszenie aktualnego rozmiaru listy
wsk_pom=wsk_pom->next;
}
}