A l'image du langage C, le langage C++ exploite une librarie provenant essentiellement d'Unix ,système d'exploitation fondé sur sur le C.
Les concepteurs de C++ ont ajouté une autre bibliothèque pour utiliser les nouvelles possibilités d'abstraction du langage.
La bibliothèque STL contient de nombreux modèles de fonctions et de classes qui ne peuvent etre implementes de maniere optimale dans le langage lui-meme.
Elle fournit des utlitaires pour batir d'autres bibliotheques.
Vous devriez en apprednre plus dans ce tutoriel.
Wina , La Vista...
1 - Organisation générale
Les fonctions de la bibliotheque standard sont definies dans l'espace de nom std(ou s).
Elles sont presentees sous la forme d'un ensemble d'en-tetes , a l'image de la bibliotheque du langage C.
Theme Principales en-tetes
Conteneurs vector,listdeque,queu,stack,map,set,bitset
Utilitaires generaux utility,functional,memory,ctime
Operateurs d'iterations iterator
Algorithmes algorithm,cstdlib
Diagnostics exception,stdexcept,cassert,cerrno
Chaines string,cctype,cwtype,cstring,cwchar,cstdlib
Entrees/Sorties iosfwd,iostream,ios,streambuf,istream,ostream,
iomanip,sstream,cstdlib,fstream,cstdio,cwchar
Localisation locale,clocale
Support du langage limits,climits,cfloat,new,typeinfo,exception,
cstddef,stdarg,csetjmp,cstdlib,ctime,csignal
Caracteres numeriques complex,valarray,numeric,cmath,cstdlib
Vous pouvez avoir la doc sur STL via google.
Bonne pioche...
2 - Conteneurs
Les conteneurs sont des objets prevus pour rassembler d'autres objets.
L'horlogeneite des objets contenus et leur mode d'acces(indexe,noms,indtermine)determinent differents types de contenurs.
La STL connnait les vecteurs(tableaux a une dimension), les listes doublement chainees,les files d'attentes a simmple et double acces , les piles , les tableuax associatifs , les ensebmles et les tableuax de booleens.
Exemple de STL::conteneurs
#include <windows.h>
#include <iostream.h>
#include <vector.h>
LONG lFin = 0
using namespace std; // utilise la bibliotheque STL standard du C++ pure
void main()
{
// Un vecteur compose de 3 chaines de carateres
vectorvector<char*>vect(3);
// Charger le vecteur
vect.at(0)="debut\n";
vect.at(0)="Afficher\n";
vect.at(0)="Fin\n";
// aficher le vecteur
for(int i=0; i<vect.size();i++)
cout<<vect.at(i)<<endl;
return lFin;
}
2 - Une chaine est une suite ordonnee de caracteres , et la bibliotheque STL fournit une classe pour raseembler toutes les operations habituelles concernant les chaines.
L'implementation des chaines prevue par le langage C donne une part trop belle aux pointeurs.
Au dela des fonctions de base(longueur,comparaison), d'autres operations plus complexes(recherche,remplacement,mise en memoire indexee (buffer) tampon)sont mieux supportes par la STL.
Par ailleurs, l'impemenation sous la forme d'une classe aux operateurs surcharges rend les notations beaucoup plus lisibles et beaucoup plus claires
Exemple :
#include <windows.h>
#include <iostream.h>
#include <string>
using namespace std;
LONG lFin=0x0000;
void main()
{
sring s1="Windows Vista" s2="Linux Debian";
// comparer les deux chaines
if(s1 !=s2)
cout <<"l'operateur != est plus simple que strcmp !"<<endl;
// concatener
string s3=s1+""+s2;
cout<<s3.c_str()<<endl;
// rechercher
cout<<"trouver " <<s2.c_str()<<" dans "<<s1.c_str()<<" : ";
string::size_type t=s1.find(s2);
cout<<t<<endl;
// remplacer du texte
s1.replace(0,3,"lpstrGeek");
cout<<s1.c_str()<<endl;
// itrerer
for(int i=0; i<s1.length();i++)
cout<<s1[i]<<" ";
return lFin;
}
Interessons nous maintenant au mecanisme d'entrees et de sorties, utilises
notmamment pour des operations sur fichier dans une interface utilisateur.
Entrees/Sorties
Bien qu'il soit tout a fait envisageable d'utiliser les fonctions C de <stdio.h>
Pour:
Ouvrir : fopen
Lire : fread
Ecrire : fwrite
Fermer : fclose
des fichiers , la STL met a la disposition ndu developpeur un tout nouveau dispositif objet.
Il s'agit des flux(streams) et nous connaissons deja cin et cout.
Ces flux sont bases sur la classer ios, a partir de laquelle sont derivees des classes generales comme istream et ostream , des classes d'acces aux fichers fstream et des classes de flux memoire strstreambase.
Pour les acces de bas niveau(low level access LLA), il y a la classe streambuf qui se derive en filebuf,stdiobuf,strstreambuf,conbuf.
L'exemple qui suit illustre les flux fonctionnant avec ios e l'emploi de formateurs
pour manipuler des fichiers.
Exemple :
#include <windows.h>
#include <iostream.h>
#include <fstream.h>
LONG lFin=E_FAIL;
void main()
{
// generer un flux en sortie associe a un fichier
ofstream sortie("_test.txt",ios::sbinary);// _test.txt est un nom de fichier comme
// tout autre.on aurait pu mettre test.txt ou t_text.txt , ca n'y changerait que dalle
// soyez creatifs :) newbies bien surs
// ecrire dans le fichier
sortie<<"il est tres confortable d'ecrire dans " <<1<<" fichier ";
sortie<<endl;
// comme vous le notez il est possible d'ecrire sur autant de lignes qu'on le souhaite avec le // C++ et la STL
sortie<<" certains formateurs sont disponibles : "<< hex << 20<<endl;
// fermer le flux precedement ouvert
sortie.close();
// generer un flux associe a un fichier
ifstream entree("_test.txt");
entree.unsetf(ios::skipws); // il ne faut surtotu pas ingorer les espaces
// affichage
unsigned char c;
while(entree>>c) // lire le caractere
cout<<c; // l'affichage final a l'ecran
// fermer le flux d'entree
entree.close();
return lFin; // meme message que pour _text un peu plus haut :)
}
Pour les operations d'netree/sortie , l'approche des flux hisse C++ au niveau des langages moderne qui separent donnees et emplacement.
Partant de ce principe ineductable , l'adaptation d'un programme utilisant des fichers a une version reseau deveint alors trop simple.
Fin du tuto ...
A bientot,
donc,t bonne prog,
Wina , La Vista , ciao ! et a++ :=)