Stl : trier un fichier de données et insérer une valeur dans le fichier trié

Description

Le programme présente comment utiliser les itérateurs adaptateurs pour lier
un flux de données fichier à un vector, puis utilise les fonctions de <Algoritm> pour opérer simplement sur les données du fichier.

L'exemple ci dessous se limite au trie.
Dans le zip, le projet complet en Visual6 est disponible :
- un programme trie les données et les enregistre,
- l'autre insère une valeur dans le fichier trié.

Source / Exemple :


//-------------Utiliser la STL pour Trier un fichier ----------------------
//  	Met en oeuvre
//		 - les R/W formatees
//		 - les iterateurs adtapteurs
//		 - le conteneur vector
//		 - les fonctions generiques de Algorithm
//-------------------  David Saint-Mellion  03/02/2003 -----------------

#include <iostream>
#include <fstream>		
#include <vector>		
#include <algorithm>  // copy(),sort()
//#include <iterator>  // ostream_iterator, istream_iterator, back_inserter()
using namespace std ;

int main(void){
	// Definit un flux fichier en R
	ifstream fichierCoteR;
	// Definit un flux fichier en W
	ofstream fichierCoteW;
	// Definit un vector de flottants
	vector<float> vecCote;
	// Definit un iterateur adaptateur pour ecrire dans le fichier
	// le separateur des donnees est \n
	ostream_iterator<float> fichierW(fichierCoteW,"\n");
	// Definit un iterateur adaptateur pour afficher sur la sortie standard
	ostream_iterator<float> ecran(cout," ");

	// Ouvre le fichier en R
 	fichierCoteR.open("piece.dat"); 
	// Lit le fichier et insere les valeurs dans le vector
	// en le faisant grossir
	copy(istream_iterator<float>(fichierCoteR),
                       istream_iterator<float>(),
                       back_inserter(vecCote) // Insere à la fin du vector
	       );
	// Affiche la sequence Non Triee
	copy(vecCote.begin(),vecCote.end(), ecran);
	cout<<endl;
	
	// Ordonne les objets du vector dans l'ordre croissant
	sort(vecCote.begin(),vecCote.end());
	// Affiche la séquence Triee
	copy(vecCote.begin(),vecCote.end(), ecran);
	cout<< endl;
		// Ferme le fichier
	fichierCoteR.close();
	
	// Ouvre le fichier en W avec destruction des donnees
 	fichierCoteW.open("piece_t.dat");
	// Copie le vector dans le flux fichiers
	copy(vecCote.begin(),vecCote.end(), fichierW);
	cout<< endl;

	return 0;
}

// -------------------- Fonctions et iterateurs utilises -----------------------
//  itrOutput copy(itrInput prem, itrInput der, itrOutput destination)
//     Copie une sequence ailleurs (3ème argument)
//
//  void sort(itrRandomAccess prem, itrRandomAccess der)
//     Trie une séquence dans l'ordre croissant
//
//  itrBackInsert (Conteneur &conteneur)
//    Iterateur adaptateur pour l'insertion d'un objet à la fin du conteneur
//  ostream_iterator<Type> identifiant(IntanceFluxW,Chaine de separateurs)
//    Iterateur adaptateur pour ecrire dans les flux
//  istream_iterator<Type> identifiant(IntanceFluxR)
//    Iterateur adaptateur pour lire les flux
//     Par défaut, EOF est geree pour les 2 derniers iterateurs

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.