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

[C++] Cykliczne iterowanie po liście oraz usuwanie z niej elementów

Ostatnio zmodyfikowano 2013-11-22 03:24
Autor Wiadomość
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??
P-96871
Mitu
» 2013-11-21 03:35:46
C/C++
for( list < int >::iterator iter = lista.begin(); /*warunek końca pętli*/;( iter != lista.end ) ? iter++
    : iter = lista.begin )
 Może coś takiego?
P-96881
olieb
Temat założony przez niniejszego użytkownika
» 2013-11-21 13:14:38
Czyli powrot iteratora dodac w petli? Dobrze rozumiem?
P-96913
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.
C/C++
#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(); /*warunek końca pętli*/;( iter != lista.end() ) ? iter++: iter = lista.begin() )
         std::cout << * iter << std::endl;
   
    return 0;
}
P-96914
Mitu
» 2013-11-21 14:11:15
@maly

C/C++
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ć?
P-96918
pekfos
» 2013-11-21 14:16:03
C/C++
while( 2 )
for( i = lista.begin(); i != lista.end(); ++i )
{
}
P-96919
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:
C/C++
#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;
}
P-96923
Monika90
» 2013-11-21 19:33:26
C/C++
ciag.erase( it );
erase unieważnia iterator
P-96962
« 1 » 2
  Strona 1 z 2 Następna strona