Referencja do listy jako argument funkcji

Odpowiedz Nowy wątek
2015-01-27 00:14
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.

Pozostało 580 znaków

2015-01-27 00:22
1

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

Pozostało 580 znaków

2015-01-27 00:24
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++

Pozostało 580 znaków

2015-01-27 00:45
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

edytowany 1x, ostatnio: spartanPAGE, 2015-01-27 00:46
a to, że on używa listy to najmniejszy problem hah :) -> najgorszy kontener jaki mógł wybrać - gośćabc 2015-01-27 00:48
a to tak swoją drogą :P - spartanPAGE 2015-01-27 00:50
ok, a jaki kontener polecacie? - bryla33 2015-01-27 01:04
vector <- prawie zawsze najlepszy wybór - spartanPAGE 2015-01-27 01:08
Dziękuję za pomoc, zamieniłem list na vector, dodatkowo użyłem find_if :) - bryla33 2015-01-27 09:14

Pozostało 580 znaków

2015-01-27 01:05
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 ;)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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