sprawdzania czy liczba jest w kolejce

sprawdzania czy liczba jest w kolejce
nw nwnw
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
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

Kopiuj

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
    
}

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
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?

nw nwnw
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
0

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

several
  • Rejestracja: dni
  • Ostatnio: dni
0

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

nw nwnw
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
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ę

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
2

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

Kopiuj
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.