Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C++] - Unire 2 Liste : metodo splice() di std::list non funziona con i puntatori-lista

    ciao,
    ho un vector puntatori di list puntatori che contengono degli oggetti Nodo puntatori.

    codice:
     std::vector<std::list<Nodo *>* > *listaConcatenata = new std::vector<std::list<Nodo *>* >();
    il mio problema, è che vorrei unire 2 liste della lista concatenata e ho provo a farlo con splice,

    codice:
    if (contatoreLista1 <= contatoreLista2)
        {
            std::list <Nodo*>::iterator it2;
            std::list <Nodo*> *lista1 = this->listaConcatenata->at(indiceLista1);
            std::list <Nodo*> *lista2 = this->listaConcatenata->at(indiceLista2);
            it2 = listaConcatenata->at(indiceLista2)->end();
            lista2->splice(it2, lista1); // qui mi sottolinea in rosso la freccetta ->
        }
    ma quando lo faccio il mio visual studio non compila il programma perchè mi sembra che splice() accetti solo list statiche e non list puntatori,
    mi aiutate ad ovviare a questo problema?

    Nota: mi succede lo stesso identico errore di tipo, se uso la funzione merge() al posto di splice()

    Compilo da Windows 8, con Visual Studio 2013

    GRAZIE
    Ultima modifica di lello82nap; 08-02-2014 a 18:22

  2. #2
    splice accetta un riferimento ad una lista, non un puntatore, per cui devi dereferenziare il puntatore prima di passarglielo.
    codice:
    lista2->splice(it2, *lista1);
    (tra parentesi, mi lascia perplesso l'uso di tutti questi oggetti allocati sull'heap, e in generale l'uso di un vector di puntatori (!?) a list contenente puntatori a Nodo, che cosa stai costruendo esattamente? )
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    MIItaly sei sempre la mia salvezza!
    un giorno di questi devo offrirti una cena fuori.
    mi hai risolto il problema.

    nulla di chè MI, sto facendo dei progetti universitari per un esame che devo sostenere, al mio professore piace che si usi rigorosamente l'allocazione dinamica ma senza i costrutti del c, quindi senza malloc e solo usando new.
    tutto qui :-)

    grazie mille !!!!

  4. #4
    Quote Originariamente inviata da lello82nap Visualizza il messaggio
    MIItaly sei sempre la mia salvezza!
    un giorno di questi devo offrirti una cena fuori.

    nulla di chè MI, sto facendo dei progetti universitari per un esame che devo sostenere, al mio professore piace che si usi rigorosamente l'allocazione dinamica ma senza i costrutti del c, quindi senza malloc e solo usando new.
    tutto qui :-)
    Sull'evitare i costrutti del C sono d'accordo, sull'usare sempre l'allocazione dinamica "manualmente" un po' meno... tieni conto che oggetti come std::list e std::vector usano già internamente l'allocazione dinamica, e in particolare std::list implementa già una lista linkata, per cui non capisco molto l'uso che ne stai facendo.
    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.