lista przekładanie ostatniego elementu
Ostatnio zmodyfikowano 2015-11-01 11:04
Asahel Temat założony przez niniejszego użytkownika |
» 2015-10-31 15:55:48 Dotarło to teraz do mnie, że ta lista się wydłuża. Przeziębienie robi swoje. Najprosciej chyba będzie wziąć wektor, wskaźnik i jakaś zmienną tymczasową. |
|
carlosmay |
» 2015-10-31 16:00:35 std::list < int > lista; for( int i = 1; i <= 8; i++ ) lista.push_back( i );
for( int el: lista ) cout << el << " ";
cout << endl;
typedef std::list < int >::iterator liter; liter iter, iter_end; iter = lista.begin();
for( int i = 7; i > 1; i-- ) { iter_end = lista.end(); --iter_end; int temp = * iter_end; lista.erase( iter_end ); iter_end = iter; advance( iter_end,( i - 1 ) ); lista.insert( iter_end, temp ); } for( int el: lista ) cout << el << " "; cout << endl;
to nie jest takie trudne. Trzeba się z tym tylko obyć. |
|
Gibas11 |
» 2015-10-31 23:18:27 Palnąłem głupotę, nieważne. |
|
j23 |
» 2015-11-01 11:04:55 Inna wersja tego samego: std::list < int > lista;
for( int i = 1; i <= 8; i++ ) lista.push_back( i );
for( int i = lista.size() - 1; i > 0; --i ) { auto it = lista.begin(); std::advance( it, i ); lista.insert( it, lista.back() ); lista.pop_back(); } Wersja zoptymalizowana, bez zbędnego kręcenia iteratorem: auto it = lista.end();
for( int i = lista.size() - 1; i > 0; --i ) { lista.insert( --it, lista.back() ); --it; lista.pop_back(); }
|
|
1 « 2 » |