Referencja do listy jako argument funkcji

0

Witam, mam funkcję, która sprawdza czy element jest na liście. Wygląda ona tak:


bool Picture::isInList(list<SDL_Color> ListOfColors, SDL_Color color) {
    for(list<SDL_Color>::iterator it = ListOfColors.begin(); it != ListOfColors.end(); it++)
    {
        if(((*it).r == color.r) && ((*it).b == color.b) && ((*it).g == color.g)) {
            return true;
        }
    }
    return false;
}

Przy takim kodzie wszystko działa poprawnie. Aż się prosi żeby tę listę przekazywać przez referencję (dodatkowo oznaczając jako const), kolor tak samo.

bool Picture::isInList(const list<SDL_Color>& ListOfColors, const SDL_Color& color) {
    for(list<SDL_Color>::const_iterator it = ListOfColors.begin(); it != ListOfColors.end(); it++)
    {
        if(((*it).r == color.r) && ((*it).b == color.b) && ((*it).g == color.g)) {
            return true;
        }
    }
    return false;
}

Wszystko byłoby ok gdyby nie to, że przy taki zapisie dostaję całkiem inne wyniki niż w przypadku pierwszym.

Czy mógłby mi ktoś podpowiedzieć dlaczego te wyniki się różnią skoro analizuję ten sam obraz, a różnica jest tylko w argumentach? Dodam, że dla pierwszego kodu funkcja działa poprawnie.

1

jeżeli to jest jedynie lista kolorów, i tam nie kopiujesz jakichś niespodziewanych rzeczy, to musi być ten sam wynik

1

Brzmi trochę jak magia. Trzeba po prostu debuggować, sprawdzić jakie wartości są w liście w momencie przekazania i jaką wartość ma drugi argument. Cudów nie ma.

Przy okazji:

++it

zamiastit++

1
twonek napisał(a):

Brzmi trochę jak magia. Trzeba po prostu debuggować, sprawdzić jakie wartości są w liście w momencie przekazania i jaką wartość ma drugi argument. Cudów nie ma.

Przy okazji:

++it

zamiastit++

A w tym wypadku nawet foreach
ew std::contains

0

Wydawało mi się, że wszystko sprawdziłem. Niestety tylko mi się wydawało. Problem leżał w pobieraniu pikseli.

Dzięki za chęć pomocy ;)

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