Discussione: [C++] Lista di struct
Visualizza messaggio singolo
Vecchio 04-09-2009, 10.24.40   #6
P8257 WebMaster
Gold Member
 
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
P8257 WebMaster promette bene
Non sono sicuro di aver capito bene il problema dell'operare coi campi, forse perché stai cercando di operare con una lista despecializzata su un contesto specializzato...

Oltre ai link e agli spunti che ti ha fornito Lory volevo suggerirti di guardare nuovamente il link dell'implementazione standard ed in particolare...

Codice:
        void push_back(T Item)
        {
            bValid=false;

            if(m_pEnd)
            {
                m_pEnd->m_pNext = new ListNode(Item);
                m_pEnd->m_pNext->m_pPrev = m_pEnd;
                m_pEnd = m_pEnd->m_pNext;
            }
            else
            {
                m_pHead = new ListNode(Item);
                m_pEnd = m_pHead;
            }
            m_dwSize++;
        }

        void Insert(T Item,ListNode* pPrev = 0)
        {
            bValid=false;
            m_dwSize++;

            if(!pPrev)
            {
                ListNode* pBase = m_pHead;
                m_pHead = new ListNode(Item);
                m_pHead->m_pNext = pBase;
                if(!pBase)
                    pBase = m_pHead;
                pBase->m_pPrev = m_pHead;
                if(!m_pEnd)
                {
                    m_pEnd = pBase;
                }
            }
            else
            {
                ListNode* pNext = pPrev->m_pNext;
                if(!pNext)
                {
                    pPrev->m_pNext = new ListNode(Item);
                    pPrev->m_pNext->m_pPrev = pPrev;
                    if(m_pEnd == pPrev)
                    {
                        m_pEnd = pPrev->m_pNext;
                    }
                }
                else
                {
                    pPrev->m_pNext = new ListNode(Item);
                    pPrev->m_pNext->m_pPrev = pPrev;
                    pPrev->m_pNext->m_pNext = pNext;
                    pNext->m_pPrev = pPrev->m_pNext;
                    if(m_pEnd == pPrev)
                    {
                        m_pEnd = pPrev->m_pNext;
                    }
                }
            }
        }
Come vedi, se la tua lista, al posto di essere generica fosse specifica (come in realtà dovrebbe essere) il problema dell'operare coi singoli campi non ce l'hai perché operi sul puntatore all'elemento listNode che nel tuo caso è l'intera struttura InfoVolume, ne consegue che per "aggiornare" la quantità di un certo volume in lista, a meno che non vuoi implementarti un metodo Update (ma il gioco non vale la candela) devi estrarre l'item dalla lista, crearne un'istanza per referenza, modificare il valore dei capmi di struttura, rimuoverlo dalla lista e riaggiungerlo, a tale scopo usa il metodo RemoveAt e Push_back...
P8257 WebMaster non è collegato   Rispondi citando