lista przekładanie ostatniego elementu
Ostatnio zmodyfikowano 2015-11-01 11:04
Asahel Temat założony przez niniejszego użytkownika |
lista przekładanie ostatniego elementu » 2015-10-31 11:55:54 Czy ktoś może mi pomóc napisać algorytm, który będzie dla przykładu na n = 8 będzie wykonywać taką operację: 1 2 3 4 5 6 7 8 bierzemy 8(ostatni element listy) wsadzamy na 7 miejsce 1 2 3 4 5 6 8 7 bierzemy 7(ostatni element listy) wsadzamy na 6 miejsce 1 2 3 4 5 7 6 8 bierzemy 8(ostatni element listy) wsadzamy na 5 miejsce 1 2 3 4 8 5 7 6 bierzemy 6(ostatni element listy) wsadzamy na 4 miejsce 1 2 3 6 4 8 5 7 bierzemy 7(ostatni element listy) wsadzamy na 3 miejsce 1 2 7 3 6 4 8 5 bierzemy 5(ostatni element listy) wsadzamy na 2 miejsce - przy 2 miejscu przerywamy 1 5 2 7 3 6 4 8 No i niestety coś nie mogę tego napisać za pomocą #include<list> for( std::list < int >::reverse_iterator i = mylist.rbegin(); i != mylist.rend(); ++i ) { mylist.insert(, ); } [ cpp ] |
|
carlosmay |
» 2015-10-31 12:54:40 |
|
Asahel Temat założony przez niniejszego użytkownika |
» 2015-10-31 13:15:48 Niestety nie działa #include <iostream> #include <vector> #include <list>
using namespace std;
int main() { std::list < int > mylist; std::list < int >::iterator last_element = mylist.end(); std::list < int >::reverse_iterator iterator_position = mylist.rbegin(); int n; cin >> n; for( int i = 1; i <= n; ++i ) mylist.push_back( i ); for( int i = n; i >= 1; i-- ) { mylist.insert( iterator_position, * last_element ); iterator_position++; } for( list < int >::iterator it = mylist.begin(); it != mylist.end(); ++it ) { cout <<* it << ' '; } }
|
|
carlosmay |
» 2015-10-31 14:12:43 std::list < int > lista; for( int i = 1; i <= 6; i++ ) lista.push_back( i );
for( int el: lista ) cout << el << " ";
cout << endl;
typedef std::list < int >::iterator liter;
liter iter_end = lista.end(); --iter_end; for( liter iter = lista.begin(); iter != iter_end; ++iter ) std::cout << * iter << " ";
std::cout << std::endl;
|
|
Asahel Temat założony przez niniejszego użytkownika |
» 2015-10-31 14:28:11 A dlaczego to nie działa dla n==8. Chcę po prostu zamienić 8 z 7 za pomocą komendy insert. std::list < int > mylist; std::list < int >::reverse_iterator pointer = mylist.rbegin(); std::list < int >::reverse_iterator last_element = mylist.rbegin();
int n; cin >> n; / n == 8 for( int i = 1; i <= n; ++i ) mylist.push_back( i );
pointer++;
mylist.insert( pointer, * last_element );
/.a wydawalo mi sie, ze powinno wsadzic 8 na miejsce 7 i wypluc:
for( list < int >::iterator it = mylist.begin(); it != mylist.end(); ++it ) { cout <<* it << ' '; }
|
|
carlosmay |
» 2015-10-31 15:02:56 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 = iter_end = lista.begin(); advance( iter_end, 7 ); int temp = * iter_end;
lista.erase( iter_end ); for( int el: lista ) cout << el << " "; cout << endl;
iter_end = iter; advance( iter_end, 6 ); lista.insert( iter_end, temp );
for( int el: lista ) cout << el << " "; cout << endl;
można tak to zrobić. |
|
Asahel Temat założony przez niniejszego użytkownika |
» 2015-10-31 15:33:22 Nie da się prościej? To zadanie u góry nie wydaje się trudne, ale nie mogę ogarnąć tego jak posługiwać się iteratorami. |
|
carlosmay |
» 2015-10-31 15:39:33 Nie wiem czy jest funkcja przesuwająca elementy dla std::list. Poszukaj w linkach z drugiego posta.
Musi to być funkcja przesuwająca (zamieniająca miejscami elementy), bo wstawianie insert'em wydłuża listę.
|
|
« 1 » 2 |