[C++] Cykliczne iterowanie po liście oraz usuwanie z niej elementów
Ostatnio zmodyfikowano 2013-11-22 03:24
olieb Temat założony przez niniejszego użytkownika |
[C++] Cykliczne iterowanie po liście oraz usuwanie z niej elementów » 2013-11-20 23:48:30 Mam w tym temacie pytanie o iterowanie listy, tak aby iterator mogl chodzic po liscie w kolko, czyli kiedy wskazuje na ostatni element listy, przeskakuje potem na pierwszy element i tak w kólko.
Macie jakies pomysly?? |
|
Mitu |
» 2013-11-21 03:35:46 for( list < int >::iterator iter = lista.begin(); ;( iter != lista.end ) ? iter++ : iter = lista.begin ) Może coś takiego? |
|
olieb Temat założony przez niniejszego użytkownika |
» 2013-11-21 13:14:38 Czyli powrot iteratora dodac w petli? Dobrze rozumiem? |
|
maly |
» 2013-11-21 13:38:37 Nierozumiem z czym masz problem, jeśli iter == end to iter = begin. @Mitu Twój kod jakoś niedziała. //EDIT @Down Nie chodziło mi o błędy kompilacji tylko o dziwne wyniki. #include <iostream> #include <list>
int main() { std::list < int > lista; lista.push_back( 0 ); lista.push_back( 1 ); lista.push_back( 2 ); lista.push_back( 3 ); for( std::list < int >::iterator iter = lista.begin(); ;( iter != lista.end() ) ? iter++: iter = lista.begin() ) std::cout << * iter << std::endl; return 0; } |
|
Mitu |
» 2013-11-21 14:11:15 @maly for( list < int >::iterator iter = lista.begin();;( iter != lista.end() ) ? iter++ : iter = lista.begin() ) Brakło nawiasów po begin i end. @olieb Co właściwie chcesz zrobić? |
|
pekfos |
» 2013-11-21 14:16:03 while( 2 ) for( i = lista.begin(); i != lista.end(); ++i ) { } |
|
olieb Temat założony przez niniejszego użytkownika |
» 2013-11-21 15:14:11 Co chce zrobic?? Otóz, chce pobierac od uzytkownika licznik(liczbe operacji) A i B. Po liczniku(odzielonym spacja) uzytkownik w pisuje dowolny ciag na ktorym program robi podana liczbe operacji. A - usunięcie elementu a ciągu o indeksie POS+1, następnie przesunięcie wskaźnika POS o a elementów w prawo. B - wstawienie tuż po (pozycja POS+1) elemencie a ciągu o indeksie POS elementu o wartości a-1, następnie przesunięcie wskaźnika POS o a elementów w prawo. Operacje A jezeli POS pokazuje liczbe parzysta. Operacja B jezeli nie parzysta. Kod nie dziala mi poprawnie, wydaje mi sie ze wlasnie dlatego ze iterator nie chodzi po liscie cyklicznie, choc pa trzac logicznie na petle for( POS = ciag.begin(); POS != ciag.end(); POS++ ) to w niej poruszac sie powinien cyklicznie. Gdzie zatem moze tkwic problem?? Mój kod: #include <iostream> #include <list>
using namespace std;
int main( int argc, char ** argv ) { int a, licznik; list < unsigned int > ciag; list < unsigned int >::iterator POS, it; cin >> licznik; } for( POS = ciag.begin(); POS != ciag.end(); POS++ )
it = ciag.begin();
POS = ciag.begin();
while( licznik != 0 ) { licznik = licznik - 1; if( POS % 2 == 0 ) { it++; ciag.erase( it ); advance( it, POS ); it = POS; } else { it++; ciag.insert( it, POS - 1 ); --it; advance( POS, POS ); it = POS; } }
for( POS = ciag.begin(); POS != ciag.end(); ++POS ) { cout << " " << * POS << endl; cout << endl; }
return 0; }
|
|
Monika90 |
» 2013-11-21 19:33:26 erase unieważnia iterator |
|
« 1 » 2 |