Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[STL] Iterator listy

Ostatnio zmodyfikowano 2016-07-06 22:06
Autor Wiadomość
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:
C/C++
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.
P-149735
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:
C/C++
list < int >::iterator it = intList.begin();
list < int >::iterator prevIt = intList.begin();
++it;

for(; it != intList.end(); ++it )
{
    if( * it > * prevIt )
    {
    }
    prevIt = it;
}
P-149737
carlosmay
» 2016-07-06 22:06:12
Można to zrobić z jednym iteratorem:
C/C++
#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';
        }
    }
   
}
P-149739
« 1 »
  Strona 1 z 1