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

lista przekładanie ostatniego elementu

Ostatnio zmodyfikowano 2015-11-01 11:04
Autor Wiadomość
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>

C/C++
for( std::list < int >::reverse_iterator i = mylist.rbegin(); i != mylist.rend(); ++i )
{
    mylist.insert(, ); //nie wiem jak to tutaj wpisać
}
[ cpp ]
P-139411
carlosmay
» 2015-10-31 12:54:40
P-139414
Asahel
Temat założony przez niniejszego użytkownika
» 2015-10-31 13:15:48
Niestety nie działa

C/C++
#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 << ' ';
    }
   
   
}
P-139416
carlosmay
» 2015-10-31 14:12:43
C/C++
std::list < int > lista;
for( int i = 1; i <= 6; i++ )
     lista.push_back( i );

for( int el: lista ) cout << el << " "; // wypisz liste, dost od C++11

cout << endl;

typedef std::list < int >::iterator liter; // liter alias dla pelnej nazwy


liter iter_end = lista.end();
--iter_end; // ustaw iter_end na ostatni el listy
for( liter iter = lista.begin(); iter != iter_end; ++iter )
     std::cout << * iter << " ";

std::cout << std::endl;
 
P-139423
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.

C/C++
std::list < int > mylist; //1 2 3 4 5 6 7 8
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 ); //1 2 3 4 5 6 7 8


pointer++; //wksazuje na 7 element
//last_element wkazuje na 8
mylist.insert( pointer, * last_element ); //tutaj wyskauje blad no matching function
//rozumiem ta komende jako wez wartosc last_element i wsadź na miejsce gdzie pokazuje wskaznik, czyli 7.
/.a wydawalo mi sie, ze powinno wsadzic 8 na miejsce 7 i wypluc:
//1 2 3 4 5 6 8 7
for( list < int >::iterator it = mylist.begin(); it != mylist.end(); ++it )
{
    cout <<* it << ' ';
}
P-139425
carlosmay
» 2015-10-31 15:02:56
C/C++
std::list < int > lista;
for( int i = 1; i <= 8; i++ )
     lista.push_back( i );

for( int el: lista ) cout << el << " "; // wypisz liste, dost od C++11

cout << endl;

typedef std::list < int >::iterator liter; // liter alias dla pelnej nazwy

liter iter, iter_end;
iter = iter_end = lista.begin(); // oba iter'y wskazuja poczatek
advance( iter_end, 7 ); // przesun iter_end na ostatni el listy
int temp = * iter_end; // uzyj temp do przech wrtosci

lista.erase( iter_end ); // usun ost
for( int el: lista ) cout << el << " "; cout << endl;

iter_end = iter; // ustaw na poczatek
advance( iter_end, 6 ); // przesun na obecnie ostatni
lista.insert( iter_end, temp ); // wstaw przed ostatni

for( int el: lista ) cout << el << " "; cout << endl;
 można tak to zrobić.
P-139432
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.
P-139435
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ę.

P-139436
« 1 » 2
  Strona 1 z 2 Następna strona