sprawdzania czy liczba jest w kolejce

0

mam problem z funkcja sprawdzającą czy dana liczba jest w kolejce w taki sposób by nie stracić danych z oryginalnej kolejki, zależy mi na FIFO więc nie mogę operować na tablicach czy jakiejkolwiek innej strukturze


int czy_w_kolejce( int liczba )
{
    queue < int > kolejka_tymczasowa;
    kolejka_tymczasowa = kolejka_org; // kolejka_org jest wypełniona wcześniej minimum 5 liczbami
    int jest = 0;
    
    
    do {
        
        if( kolejka_tymczasowa.empty() ) // kolejka nigdy z góry nie będzie pusta - jedynie po serii ściągnięć 
                                                              // w ostatnim warunku może tak się stać
        {
            return 0; // zwraca 0 gdy liczby nie było za zadnej pozycji w kolejce
        }
        
        else if( !kolejka_tymczasowa.empty() )
        {
            if( kolejka_tymczasowa.front() == liczba )
            {
                jest = 1;
            }
            else if( kolejka_tymczasowa.front() != liczba )
            {
                kolejka_tymczasowa.pop();
            }
        }
        
    } while( jest == 1 );
    
    if( jest == 1 ) return 1; // zwraca 1 gdy znalazło wystąpienie liczby w kolejce
    
}

0

Jaki masz problem z funkcja sprawdzającą czy dana liczba jest w kolejce w taki sposób by nie stracić danych z oryginalnej kolejki?

0

funkcja wywołuje się w nieskończoność mimo słowa return

0

Zmień while( jest == 1 ); na while( !kolejka_tymczaoswa.empty() && jest == 0);.

0
several napisał(a):

Zmień while( jest == 1 ); na while( !kolejka_tymczaoswa.empty());.

niestety nadal wywołuje się w nieskończoność, nawet po dodaniu break; gdy znajdzie liczbę

2

Przekombinowujesz. Użyj algorytmów zamiast wymyślać koło na nowo (szczególnie, że wychodzi ci romb).

bool queue_contains(queue<int> const& q, int val)
{
    struct get_cont : queue<int> {
        get_cont(queue<int> const& q) : queue<int>{q} {}
        auto const& container() const { return c; }
    } tmp{q};

    return find(tmp.container().begin(), tmp.container().end(), val) == tmp.container().end();
}

https://wandbox.org/permlink/K1CLg2w5RdNFHDnP

Jak się bardzo postarasz to bez UB można się dostać do c w oryginalnej kolejce, ale to dość sporo roboty.

1 użytkowników online, w tym zalogowanych: 0, gości: 1