Witam chciałbym porównać zmienna int z zawartością listy jednokierunkowej. Problem tkwi w tym, że chciałbym pominąć 1 pozycje tej listy bo element który chce porównać z pozycjami na liście zawsze będzie taki sam jak pozycja nr 1.
Rozumiem, że przez listę jednokierunkową rozumiesz std::forward_list<int>
.
W takim razie możesz wyszukać elementów identycznych z pierwszym bardzo prosto:
// assert(list.size() > 0);
auto val = *list.begin();
auto it = std::find(std::next(list.begin()), list.end(), val);
Przy tym rozwiązaniu sypie mi błędami jak głupi nie mogę też do niczego porównać tych wartości bo też sypie błędy spróbowałem tak:
bool Klasa::metoda() {
for (list<Typ>::iterator iter = next(lista.begin()); iter != lista.end(); iter++){
if (lista.begin() == iter) {
return true;
}
else
return false;
}
}
tylko nadal mam problem.... mianowicie zawsze zwraca mi false mimo że debug pokazuje co innego i wiem że gdzieś dalej na liście znajduje się element taki sam jak na początku.
Wyrzuć blok else
a return false
umieść na końcu funkcji.
E: Faktycznie, tu nie ma derefencji. Ślepy ja.
Porównujesz iteratory, a nie wartości. Użyj dobrego rozwiązania zamiast kombinować jak koń pod górę.
PS: std::list
to nie jest lista jednokierunkowa.
Hmm, kombinuje kombinuje i wykombinować nie moge... chociaż jakaś wskazówke jeszcze dostane?