Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    69

    [c++]invertire due elementi in una lista

    come faccio ad invertire 2 elementi all'interno di una lista?
    grazie
    divide et impera

  2. #2
    Parli di std::list o di una generica linked list?
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3

    Re: [c++]invertire due elementi in una lista

    Originariamente inviato da honnibus
    come faccio ad invertire 2 elementi all'interno di una lista?
    grazie
    Eh come vuoi fare ...?
    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.
    lolide
    Java Programmer

    Informati

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    69
    esempio ho questo codice
    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++;
    }
    }
    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?
    grazie
    divide et impera

  5. #5
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    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.

  6. #6
    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.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.