Newsgroup: it.comp.lang.c++
Titolo: Liste concatenate

Dunqe, ho fatto una lista concatenata che viene utilizzata molto nel
programma (ed è soggetta a rapide modifiche ed eliminazioni di elementi
dalla lista). 
Tutto funziona bene fino a che non mi capita che tutti gli elementi della
lista vengono eliminati. Quando ne inserisco uno nuovo il programma si
chiude con il classico errore (è un programma sotto windows) che
l'applicazione ha eseguito un'operazione non valida. 
Inoltre appare un'errore generato dalla funzione assert (assert.h).
ecco la struttura di un elemento:
*********************************************************************************************************
struct nominativi {
	char Nome [30];
	char Cognome [30];
	int Eta;
};
struct elemento {
	struct nominativi nomi;
	struct elemento * successivo;
};
*********************************************************************************************************
ecco il codice che inserisce un nuovo elemento.
*********************************************************************************************************
//nota: Primo e Ultimo sono variabili globali
#include "assert.h"
void InserisciNuovo (elemento * nuovo) {
	if (Primo == NULL) {
	Primo = nuovo;
	assert (Ultimo == NULL);
	}
	else {
	assert (Ultimo != NULL);
	Ultimo->successivo = nuovo;
	}
	Ultimo = nuovo;
}
*********************************************************************************************************
Grazie
ps: il codice è stato preso da "Visual C++ 6" di Paolo Guccini edizioni
McGraw-Hill
__
Messaggio di: Gordon

 #include "assert.h"
"assert.h" ?
non <cassert> (o <assert.h> ) ?
--
Gerolamo

Comodo, sicuro, portabile... e già fatto!
Non la conoscevo ^^
E' in qualche libreria particolare?
Come la uso?
__
Messaggio di: Gordon

 >Comodo, sicuro, portabile... e gią fatto!


 Come la uso?
mi sa che faccio prima a farti un esempio di come si usano le liste
e delle funzione che implementano o che possono essere usate su
una std::list
<codice>
#include <list>
#include <string>
#include <iostream>
using std::cout;
using std::endl;
int main()
{
    std::list<std::string> lista1;
    std::list<std::string> lista2;
    std::list<std::string>::iterator i1;
    std::list<std::string>::iterator i2;
    lista1.push_back("Usenet");
    lista1.push_back("is");
    lista1.push_back("a");
    lista1.push_back("strange");
    lista1.push_back("place");
    lista2.push_back("The");
    lista2.push_back("Internet");
    lista2.push_back("is");
    lista2.push_back("full.");
    lista2.push_back("Go");
    lista2.push_back("away.");
    // a questo punto puoi fare varie operazioni:
    // scorrere le liste:
    cout << "LISTA1: ";
    for(i1=lista1.begin(); i1!=lista1.end(); i1++)
    {
        cout << *i1 << " ";
    }
    cout << endl;
    cout << "LISTA2: ";
    for(i2=lista2.begin(); i2!=lista2.end(); i2++)
    {
        cout << *i2 << " ";
    }
    cout << endl;
    // merge:
    lista1.merge(lista2);
    cout << "MERGE: ";
    for(i1=lista1.begin(); i1!=lista1.end(); i1++)
    {
        cout << *i1 << " ";
    }
    cout << endl;
    // dimensione:
    cout << "SIZE LISTA1: " << lista1.size() << endl;
    // sort
    lista1.sort();
    cout << "SORT: ";
    for(i1=lista1.begin(); i1!=lista1.end(); i1++)
    {
        cout << *i1 << " ";
    }
    cout << endl;
    // count
    cout << "COUNT - Numero di 'is': ";
    cout << std::count(lista1.begin(), lista1.end(), "is") << endl;
    // unique (elimina i duplicati)
    // n.b dei prima ordinare la lista!
    lista1.sort();
    lista1.unique();
    cout << "UNIQUE - Numero di 'is': ";
    cout << std::count(lista1.begin(), lista1.end(), "is") << endl;
    // remove:
    lista1.remove("is");
    cout << "REMOVE - Numero di 'is': ";
    cout << std::count(lista1.begin(), lista1.end(), "is") << endl;
    for(i1=lista1.begin(); i1!=lista1.end(); i1++)
    {
        cout << *i1 << " ";
    }
    cout << endl;
    // find e quindi insert
    i1=find(lista1.begin(), lista1.end(), "full.");
    lista1.insert(i1, "quite");
    for(i1=lista1.begin(); i1!=lista1.end(); i1++)
    {
        cout << *i1 << " ";
    }
    cout << endl;
}
<\codice>
e così via...
--
Gerolamo

:
grazie ad entrambi per le risposte.
__
Messaggio di: Gordon