Allocazione dinamica della memoria in C++. Esercitazione “Interi in ordine crescente”

Descrizione del problema

Si supponga di avere un file di testo come quello mostrato in figura, in cui sono memorizzati un numero non noto a priori di numeri interi, uno per riga, che termina con un carattere di nuova riga. Si richiede di scrivere un programma in C++ che visualizzi a video in ordine crescente tutti gli interi memorizzati nel file.

File di numeri interi

Soluzione proposta

I numeri presenti nel file devono essere letti e, prima che possano essere visualizzati a video, devono essere ordinati. Essi pertanto dovranno essere memorizzati in una struttura dati, in modo da permettere di eseguire le operazioni di ordinamento. Nelle soluzioni qui proposte si sceglierà di lavorare solo con strutture dati memorizzate in memoria centrale e si sottolinea che tali strutture dovranno essere allocate in memoria RAM in maniera dinamica, visto che quanti siano i numeri contenuti nel file non è noto a priori e né si ha alcuna indicazione per poterlo stimare. Tra le strutture dati che potrebbero essere utili potremmo considerare, per esempio, un vettore a lunghezza variabile o una lista ordinata. Di seguito vengono sviluppate entrambe le proposte di soluzione.

Soluzione n. 1 con vettore dinamico a lunghezza variabile

Nel programma seguente i numeri contenuti nel file vengono letti e man mano memorizzati in un vettore dinamico la cui dimensione viene aumentata ogni volta di un’unità. I numeri interi così caricati nel vettore vengono ordinati utilizzando l’algoritmo di ordinamento per sostituzione e, infine, visualizzati a video.

Soluzione n. 2 con lista ordinata

In questa seconda proposta di soluzione gli interi contenuti nel file vengono letti e man mano aggiunti ad una struttura dati a lista ordinata creata dinamicamente nell’heap. Quando tutti i numeri sono stati letti e caricati nella lista, risultano già ordinati e, quindi, possono essere stampati a video.