Problema iteratori liste c++

di il
4 risposte

Problema iteratori liste c++

Salve, in questo periodo sto imparando ad utilizzare la stl del c++.

Quello che vorrei fare è fare un confronto con l'elemento successivo rispetto a quello puntato dall'iteratore. Ad esempio,io vorrei fare una cosa del genere:
#include <iostream>
#include <cstdlib>

using namespace std;
struct Nodo{
    int numero;
    Nodo* next;
};
int main()
{
    Nodo* inizioLista = new Nodo[sizeof(Nodo)];
    Nodo* p = inizioLista;

    inizioLista->numero = 10;
    inizioLista->next = NULL;

    if (p->next == NULL)
        cout << "p = NULL" << endl;

    return 0;
}
Solo che vorrei farla con la stl e con gli iteratori, è possibile?

4 Risposte

  • Re: Problema iteratori liste c++

    In quei termini no.
    In stl quel codice si traduce come:
    
        std::list<int> my_list;
        my_list.push_back(10);
    
        std::list<int>::iterator it = my_list.begin();
    
        if (it == my_list.end())
            cout << "end list" << endl;
    
    
    ossia l'intervallo è sempre valido tra my_list.begin() e my_list.end().
    (A seconda dello standard del compilatore che stai usando, l'esempio può variare. Questo è codice pre C++11)


    Tutte le operazioni come
    
       inizioLista->next = NULL;
    
        if (p->next == NULL)
    
    sono gestite internamente a std::list senza possibilità di accesso.
  • Re: Problema iteratori liste c++

    Quindi una cosa del genere non sarebbe possibile
    
    #include <list>
    
    std::list<int> myList;
    std::list<int> itr = myList.begin();
    myList.push_back(8);
    
    if (itr->next == NULL)
           cout << "Lista vuota";
    
    Ovviamente questa parte non può compilarla "itr->next == NULL", non esiste qualche funzione per fare un confronto del genere?
  • Re: Problema iteratori liste c++

    Quindi una cosa del genere non sarebbe possibile
    No, std::list<> solleva lo sviluppatore dalla gestione a basso livello dei meccanismi di gestione e permette di concentrarsi solo sul dato in se. Ossia non occorre preoccuparsi di puntatori next, previous et similia.
    esiste qualche funzione per fare un confronto del genere?
    Per controllare se una lista è vuota è sufficiente invocare la funzione empty()
    mentre per controllare se si è raggiunto il fine lista si procede come ti ho indicato prima.
    Qui c'è un buon reference sulle varie funzioni di std::list<>
    http://en.cppreference.com/w/cpp/container/lis
  • Re: Problema iteratori liste c++

    Ok, ho capito. grazie mille per l'aiuto
Devi accedere o registrarti per scrivere nel forum
4 risposte