[STL] Iterator listy
Ostatnio zmodyfikowano 2016-07-06 22:06
mimotego Temat założony przez niniejszego użytkownika |
[STL] Iterator listy » 2016-07-06 17:03:26 Dzień dobry! Mam przykładowy fragment kodu: list < int >::iterator it; for( it = lista.begin(); it != lista.end(); it++ ) { }
W powyższej pętli chciałbym zrobić ifa, który porównuje dwie sąsiadujące wartości listy. Próbowałem robić coś takiego: if( * it < *( it++ ) ) , jednak jak się pewnie domyślacie okazało się to błędne. Tu pojawia się właśnie moje pytanie, czy jest jakiś sposób aby to zrobić? Na chwilę obecną jedyne co mogę wymyślić to zapisywanie wartości iteratora do tablicy, na której później bym pracował. Jednak ten sposób nie wydaje się być zbyt optymalny, dlatego chciałbym się poradzić, czy może znacie jakiś lepszy? Pozdrawiam. |
|
michal11 |
» 2016-07-06 17:19:38 Napisz do czego ci to potrzebne, pewnie jest lepsze rozwiązanie. Jeżeli już musisz porównywać sąsiadujące iteratory to po prostu zapisuj wartość poprzedniego: list < int >::iterator it = intList.begin(); list < int >::iterator prevIt = intList.begin(); ++it;
for(; it != intList.end(); ++it ) { if( * it > * prevIt ) { } prevIt = it; }
|
|
carlosmay |
» 2016-07-06 22:06:12 Można to zrobić z jednym iteratorem: #include <iostream> #include <list> #include <iterator>
int main() { std::list < int > l { 1, 2, 3, 3, 5, 5 }; std::list < int >::iterator it; for( it = std::next( l.begin() ); it != l.end(); ++it ) { if( *( std::prev( it ) ) == * it ) { std::cout << *( std::prev( it ) ) << ' ' << * it << '\n'; } } }
|
|
« 1 » |