come faccio ad invertire 2 elementi all'interno di una lista?
grazie
come faccio ad invertire 2 elementi all'interno di una lista?
grazie
divide et impera
Parli di std::list o di una generica linked list?
Amaro C++, il gusto pieno dell'undefined behavior.
Eh come vuoi fare ...?Originariamente inviato da honnibus
come faccio ad invertire 2 elementi all'interno di una lista?
grazie
Usi una variabile d'appoggio (oppure 2 se si tratta di una double linkedlist) perchè, secondo logica, sostituendo un elemento all'altro perdi il primo.
esempio ho questo codice
mettiamo caso voglio invertire le chiavi del 7 elemento e del 16 elemento.Cosa devo scrivere?e se voglio aggiungere un elemento fra l'elemento 13 e 14 cosa devo scrivere?codice:#include<iostream> #include<list> using namespace std; int main(){ list<int>lista; for(int a=0;a<20;a++) lista.push_back(a); list<int>::iterator p=lista.begin(); while(p !=lista.end()){ cout<<*p<<endl; p++; } }
grazie
divide et impera
http://www.cplusplus.com/reference/stl/list/insert/
codice:int main(){ list<int>lista; for(int a=0;a<20;a++) lista.push_back(a); } list<int>::iterator p=lista.begin(); //-------------------------------------- list<int>::iterator e7=lista.begin(); list<int>::iterator e16=lista.begin(); advance(e7,7); advance(e16,16); swap(*e7,*e16); list<int>::iterator e14=lista.begin(); advance(e14,14); lista.insert(e14, 1492); //-------------------------------------- list<int>::iterator p=lista.begin(); while(p !=lista.end()){ cout<<*p<<endl; p++; } }
This code and information is provided "as is" without warranty of any kind, either expressed
or implied, including but not limited to the implied warranties of merchantability and/or
fitness for a particular purpose.
In realtà se la lista non è di interi ma di tipi "complicati" e con costruttori di copia "pesanti" usare la normale swap - che scambia i payload - non conviene più, mentre diventa conveniente lo scambio degli elementi della lista veri e propri, che si riduce a scambiare due coppie di puntatori.
Per fare ciò si può sfruttare il metodo splice; qui un esempio di come fare.
Amaro C++, il gusto pieno dell'undefined behavior.